1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SKSL_STRINGSTREAM 9*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_STRINGSTREAM 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkData.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkStream.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/SkSLOutputStream.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker namespace SkSL { 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class StringStream : public OutputStream { 18*c8dee2aaSAndroid Build Coastguard Worker public: write8(uint8_t b)19*c8dee2aaSAndroid Build Coastguard Worker void write8(uint8_t b) override { 20*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fString.empty()); 21*c8dee2aaSAndroid Build Coastguard Worker fStream.write8(b); 22*c8dee2aaSAndroid Build Coastguard Worker } 23*c8dee2aaSAndroid Build Coastguard Worker writeText(const char * s)24*c8dee2aaSAndroid Build Coastguard Worker void writeText(const char* s) override { 25*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fString.empty()); 26*c8dee2aaSAndroid Build Coastguard Worker fStream.writeText(s); 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker write(const void * s,size_t size)29*c8dee2aaSAndroid Build Coastguard Worker void write(const void* s, size_t size) override { 30*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fString.empty()); 31*c8dee2aaSAndroid Build Coastguard Worker fStream.write(s, size); 32*c8dee2aaSAndroid Build Coastguard Worker } 33*c8dee2aaSAndroid Build Coastguard Worker bytesWritten()34*c8dee2aaSAndroid Build Coastguard Worker size_t bytesWritten() const { 35*c8dee2aaSAndroid Build Coastguard Worker return fStream.bytesWritten(); 36*c8dee2aaSAndroid Build Coastguard Worker } 37*c8dee2aaSAndroid Build Coastguard Worker str()38*c8dee2aaSAndroid Build Coastguard Worker const std::string& str() const { 39*c8dee2aaSAndroid Build Coastguard Worker if (!fString.size()) { 40*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkData> data = fStream.detachAsData(); 41*c8dee2aaSAndroid Build Coastguard Worker fString = std::string((const char*) data->data(), data->size()); 42*c8dee2aaSAndroid Build Coastguard Worker } 43*c8dee2aaSAndroid Build Coastguard Worker return fString; 44*c8dee2aaSAndroid Build Coastguard Worker } 45*c8dee2aaSAndroid Build Coastguard Worker reset()46*c8dee2aaSAndroid Build Coastguard Worker void reset() { 47*c8dee2aaSAndroid Build Coastguard Worker fStream.reset(); 48*c8dee2aaSAndroid Build Coastguard Worker fString = ""; 49*c8dee2aaSAndroid Build Coastguard Worker } 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker private: 52*c8dee2aaSAndroid Build Coastguard Worker mutable SkDynamicMemoryWStream fStream; 53*c8dee2aaSAndroid Build Coastguard Worker mutable std::string fString; 54*c8dee2aaSAndroid Build Coastguard Worker }; 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSL 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker #endif 59