// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_GFX_IMAGE_BUFFER_W_STREAM_H_
#define UI_GFX_IMAGE_BUFFER_W_STREAM_H_

#include <stdint.h>
#include <vector>

#include "third_party/skia/include/core/SkStream.h"
#include "ui/gfx/gfx_export.h"

namespace gfx {

// Writes bytes to a std::vector that can be fetched. This is used to record the
// output of skia image encoding.
class GFX_EXPORT BufferWStream : public SkWStream {
 public:
  BufferWStream();
  BufferWStream(const BufferWStream&) = delete;
  BufferWStream& operator=(const BufferWStream&) = delete;
  ~BufferWStream() override;

  // Returns the output buffer by moving.
  std::vector<uint8_t> TakeBuffer();

  // SkWStream:
  bool write(const void* buffer, size_t size) override;
  size_t bytesWritten() const override;

 private:
  std::vector<uint8_t> result_;
};

}  // namespace gfx

#endif  // UI_GFX_IMAGE_BUFFER_W_STREAM_H_