diff options
author | 2017-03-31 09:33:41 -0400 | |
---|---|---|
committer | 2017-03-31 15:25:32 +0000 | |
commit | f3333c89bf05fc602d9bf8e1e24547668c660383 (patch) | |
tree | 3c0855ef8829201299ce757ecaf28bfda50a2683 /src/sksl/SkSLStringStream.h | |
parent | 66b09abdb184d843ece45a1d343fbe632075b323 (diff) |
skslc can now be compiled with no Skia dependencies, in preparation for its eventual
role in Skia's build process.
This reverts commit bcf35f86d50b784b165de703b404998dd4299f6a.
BUG=skia:
Change-Id: Id0a12dfc4d804d69a3c6bf60fed37e89ee130f02
Reviewed-on: https://skia-review.googlesource.com/10802
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'src/sksl/SkSLStringStream.h')
-rw-r--r-- | src/sksl/SkSLStringStream.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/sksl/SkSLStringStream.h b/src/sksl/SkSLStringStream.h new file mode 100644 index 0000000000..9061432018 --- /dev/null +++ b/src/sksl/SkSLStringStream.h @@ -0,0 +1,99 @@ +/* + * 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 char* data() const { + return fBuffer.c_str(); + } + + size_t size() const { + return fBuffer.size(); + } + + 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 { + SkASSERT(!fData); + fStream.write8(b); + } + + void writeText(const char* s) override { + SkASSERT(!fData); + fStream.writeText(s); + } + + void write(const void* s, size_t size) override { + SkASSERT(!fData); + fStream.write(s, size); + } + + const char* data() const { + if (!fData) { + fData = fStream.detachAsData(); + } + return (const char*) fData->data(); + } + + size_t size() const { + if (!fData) { + fData = fStream.detachAsData(); + } + return fData->size(); + } + + void reset() { + fStream.reset(); + fData = nullptr; + } + +private: + mutable SkDynamicMemoryWStream fStream; + mutable sk_sp<SkData> fData; +}; + +#endif // SKSL_STANDALONE + +} // namespace + +#endif |