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