15d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// Copyright 2015 The Chromium OS Authors. All rights reserved.
25d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// Use of this source code is governed by a BSD-style license that can be
35d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// found in the LICENSE file.
45d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
55d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#ifndef CHROMIUMOS_WIDE_PROFILING_BUFFER_WRITER_H_
65d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#define CHROMIUMOS_WIDE_PROFILING_BUFFER_WRITER_H_
75d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
85d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#include "data_writer.h"
95d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
105d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmananamespace quipper {
115d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
125d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// Writes data to a fixed-size memory buffer.
135d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmanaclass BufferWriter : public DataWriter {
145d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana public:
155d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  // The destination buffer is indicated by |buffer| and is |size| bytes long.
165d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  BufferWriter(void* buffer, size_t size)
173fa0a5f4b88119fac65f86971738ea0202797b6elakshmana      : buffer_(reinterpret_cast<char*>(buffer)), offset_(0) {
185d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana    size_ = size;
195d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  }
205d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
213fa0a5f4b88119fac65f86971738ea0202797b6elakshmana  void SeekSet(size_t offset) override { offset_ = offset; }
225d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
233fa0a5f4b88119fac65f86971738ea0202797b6elakshmana  size_t Tell() const override { return offset_; }
245d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
255d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  bool WriteData(const void* src, const size_t size) override;
265d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
275d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  bool WriteString(const string& str, const size_t size) override;
285d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
295d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana private:
305d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  bool CanWriteSize(size_t data_size) override;
315d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
325d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  // Pointer to the data buffer. Does not own the buffer.
335d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  char* buffer_;
345d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
355d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  // Current write offset, in bytes from start of buffer.
365d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana  size_t offset_;
375d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana};
385d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
395d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana}  // namespace quipper
405d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana
415d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#endif  // CHROMIUMOS_WIDE_PROFILING_BUFFER_WRITER_H_
42