xref: /aosp_15_r20/external/skia/src/sksl/SkSLOutputStream.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SKSL_OUTPUTSTREAM
9 #define SKSL_OUTPUTSTREAM
10 
11 #include "include/core/SkTypes.h"
12 
13 #include <cstdarg>
14 #include <cstddef>
15 #include <cstdint>
16 #include <string>
17 
18 namespace SkSL {
19 
20 class OutputStream {
21 public:
isValid()22     virtual bool isValid() const {
23         return true;
24     }
25 
26     virtual void write8(uint8_t b) = 0;
27 
write16(uint16_t i)28     void write16(uint16_t i) {
29         this->write8((uint8_t) i);
30         this->write8((uint8_t) (i >> 8));
31     }
32 
write32(uint32_t i)33     void write32(uint32_t i) {
34         this->write8((uint8_t) i);
35         this->write8((uint8_t) (i >> 8));
36         this->write8((uint8_t) (i >> 16));
37         this->write8((uint8_t) (i >> 24));
38     }
39 
40     virtual void writeText(const char* s) = 0;
41 
42     virtual void write(const void* s, size_t size) = 0;
43 
44     void writeString(const std::string& s);
45 
46     void printf(const char format[], ...) SK_PRINTF_LIKE(2, 3);
47 
48     void appendVAList(const char format[], va_list args) SK_PRINTF_LIKE(2, 0);
49 
~OutputStream()50     virtual ~OutputStream() {}
51 
52 private:
53     static const int kBufferSize = 1024;
54 };
55 
56 }  // namespace SkSL
57 
58 #endif
59