/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SKSL_STRINGSTREAM #define SKSL_STRINGSTREAM #include "SkSLOutputStream.h" #ifdef SKSL_STANDALONE namespace SkSL { class StringStream : public OutputStream { public: void write8(uint8_t b) override { fBuffer += (char) b; } void writeText(const char* s) override { fBuffer += s; } void write(const void* s, size_t size) override { fBuffer.append((const char*) s, size); } const String& str() const { return fBuffer; } void reset() { fBuffer = ""; } private: String fBuffer; }; #else #include "SkData.h" #include "SkStream.h" namespace SkSL { class StringStream : public OutputStream { public: void write8(uint8_t b) override { fStream.write8(b); } void writeText(const char* s) override { fStream.writeText(s); } void write(const void* s, size_t size) override { fStream.write(s, size); } const String& str() const { if (!fString.size()) { sk_sp<SkData> data = fStream.detachAsData(); fString = String((const char*) data->data(), data->size()); } return fString; } void reset() { fStream.reset(); fString = ""; } private: mutable SkDynamicMemoryWStream fStream; mutable String fString; }; #endif // SKSL_STANDALONE } // namespace #endif