1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "nacl_io/fifo_char.h"
14 FIFOChar::FIFOChar(size_t size)
20 buffer_ = new char[size];
23 FIFOChar::~FIFOChar() {
27 bool FIFOChar::IsEmpty() {
31 bool FIFOChar::IsFull() {
32 return avail_ >= size_;
35 bool FIFOChar::Resize(size_t len) {
36 // Can not resize smaller than the current size
40 // Read current data into new buffer
41 char* data = new char[len];
42 avail_ = Read(data, avail_);
51 size_t FIFOChar::ReadAvailable() {
55 size_t FIFOChar::WriteAvailable() {
56 return size_ - avail_;
59 size_t FIFOChar::Peek(void* buf, size_t len) {
60 char* ptr = static_cast<char*>(buf);
63 len = std::min(len, avail_);
67 size_t read_len = std::min(len, size_ - offs);
68 memcpy(ptr, &buffer_[offs], read_len);
83 size_t FIFOChar::Read(void* buf, size_t len) {
84 size_t read_len = Peek(buf, len);
87 tail_ = (tail_ + read_len) % size_;
92 size_t FIFOChar::Write(const void* buf, size_t len) {
93 const char* ptr = static_cast<const char*>(buf);
95 size_t room = size_ - avail_;
96 len = std::min(len, room);
98 size_t offs = (tail_ + avail_) % size_;
100 size_t write_len = std::min(len, size_ - offs);
101 memcpy(&buffer_[offs], ptr, write_len);
116 } // namespace nacl_io