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_STRINGSTREAM 9 #define SKSL_STRINGSTREAM 10 11 #include "src/sksl/SkSLOutputStream.h" 12 #include "src/sksl/SkSLString.h" 13 14 #ifdef SKSL_STANDALONE 15 16 namespace SkSL { 17 18 class StringStream : public OutputStream { 19 public: write8(uint8_t b)20 void write8(uint8_t b) override { 21 fBuffer += (char) b; 22 } 23 writeText(const char * s)24 void writeText(const char* s) override { 25 fBuffer += s; 26 } 27 write(const void * s,size_t size)28 void write(const void* s, size_t size) override { 29 fBuffer.append((const char*) s, size); 30 } 31 str()32 const String& str() const { 33 return fBuffer; 34 } 35 reset()36 void reset() { 37 fBuffer = ""; 38 } 39 40 private: 41 String fBuffer; 42 }; 43 44 #else 45 46 #include "include/core/SkData.h" 47 #include "include/core/SkStream.h" 48 49 namespace SkSL { 50 51 class StringStream : public OutputStream { 52 public: 53 void write8(uint8_t b) override { 54 fStream.write8(b); 55 } 56 57 void writeText(const char* s) override { 58 fStream.writeText(s); 59 } 60 61 void write(const void* s, size_t size) override { 62 fStream.write(s, size); 63 } 64 65 const String& str() const { 66 if (!fString.size()) { 67 sk_sp<SkData> data = fStream.detachAsData(); 68 fString = String((const char*) data->data(), data->size()); 69 } 70 return fString; 71 } 72 73 void reset() { 74 fStream.reset(); 75 fString = ""; 76 } 77 78 private: 79 mutable SkDynamicMemoryWStream fStream; 80 mutable String fString; 81 }; 82 83 #endif // SKSL_STANDALONE 84 85 } // namespace 86 87 #endif 88