text: /*
   * 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_OUTPUTSTREAM
  #define SKSL_OUTPUTSTREAM
  
  #include "src/sksl/SkSLDefines.h"
  #include "src/sksl/SkSLString.h"
  
  namespace SkSL {
  
  class OutputStream {
  public:
      virtual bool isValid() const {
          return true;
      }
  
      virtual void write8(uint8_t b) = 0;
  
      void write16(uint16_t i) {
          this->write8((uint8_t) i);
          this->write8((uint8_t) (i >> 8));
      }
  
      void write32(uint32_t i) {
          this->write8((uint8_t) i);
          this->write8((uint8_t) (i >> 8));
          this->write8((uint8_t) (i >> 16));
          this->write8((uint8_t) (i >> 24));
      }
  
      virtual void writeText(const char* s) = 0;
  
      virtual void write(const void* s, size_t size) = 0;
  
      void writeString(const String& s);
  
      void printf(const char format[], ...) SKSL_PRINTF_LIKE(2, 3);
  
      void appendVAList(const char format[], va_list args);
  
      virtual ~OutputStream() {}
  
  private:
      static const int kBufferSize = 1024;
  };
  
  }  // namespace SkSL
  
  #endif
  