/*
 * 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[], ...) SK_PRINTF_LIKE(2, 3);

    void appendVAList(const char format[], va_list args);

    virtual ~OutputStream() {}

private:
    static const int kBufferSize = 1024;
};

}  // namespace SkSL

#endif
