diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-03-31 13:56:23 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-31 18:49:51 +0000 |
commit | 0df1b04db87c3d86ee0b0bd6aa2cb5b6be32cac2 (patch) | |
tree | 12e72247e1d2f4a66d2045cc6a6a62a3505d82ab /src/sksl/SkSLStringStream.h | |
parent | f809fef8280e3d6ad9d95697cd234560b49962ab (diff) |
skslc can now be compiled with no Skia dependencies, in preparation for its eventual
This reverts commit 9bd301d640ff63c280b202c7dd00bc00a3315ff4.
Bug: skia:
Change-Id: I5ad3f77ef33aa5ce2fd27fe383c9339c571663a1
Reviewed-on: https://skia-review.googlesource.com/10964
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@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 |