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