SkSLStringStream.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. #ifndef SKSL_STRINGSTREAM
  8. #define SKSL_STRINGSTREAM
  9. #include "src/sksl/SkSLOutputStream.h"
  10. #include "src/sksl/SkSLString.h"
  11. #ifdef SKSL_STANDALONE
  12. namespace SkSL {
  13. class StringStream : public OutputStream {
  14. public:
  15. void write8(uint8_t b) override {
  16. fBuffer += (char) b;
  17. }
  18. void writeText(const char* s) override {
  19. fBuffer += s;
  20. }
  21. void write(const void* s, size_t size) override {
  22. fBuffer.append((const char*) s, size);
  23. }
  24. const String& str() const {
  25. return fBuffer;
  26. }
  27. void reset() {
  28. fBuffer = "";
  29. }
  30. private:
  31. String fBuffer;
  32. };
  33. #else
  34. #include "include/core/SkData.h"
  35. #include "include/core/SkStream.h"
  36. namespace SkSL {
  37. class StringStream : public OutputStream {
  38. public:
  39. void write8(uint8_t b) override {
  40. fStream.write8(b);
  41. }
  42. void writeText(const char* s) override {
  43. fStream.writeText(s);
  44. }
  45. void write(const void* s, size_t size) override {
  46. fStream.write(s, size);
  47. }
  48. const String& str() const {
  49. if (!fString.size()) {
  50. sk_sp<SkData> data = fStream.detachAsData();
  51. fString = String((const char*) data->data(), data->size());
  52. }
  53. return fString;
  54. }
  55. void reset() {
  56. fStream.reset();
  57. fString = "";
  58. }
  59. private:
  60. mutable SkDynamicMemoryWStream fStream;
  61. mutable String fString;
  62. };
  63. #endif // SKSL_STANDALONE
  64. } // namespace
  65. #endif