1// Copyright 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. 4 5#include "nacl_io/socket/fifo_packet.h" 6 7#include <stdlib.h> 8#include <string.h> 9 10#include <algorithm> 11 12#include "nacl_io/socket/packet.h" 13 14namespace nacl_io { 15 16FIFOPacket::FIFOPacket(size_t size) : max_bytes_(size), cur_bytes_(0) { 17} 18 19FIFOPacket::~FIFOPacket() { 20 while (!IsEmpty()) 21 delete ReadPacket(); 22} 23 24bool FIFOPacket::IsEmpty() { 25 return packets_.empty(); 26} 27 28bool FIFOPacket::Resize(size_t len) { 29 max_bytes_ = len; 30 return true; 31} 32 33size_t FIFOPacket::ReadAvailable() { 34 return cur_bytes_; 35} 36 37size_t FIFOPacket::WriteAvailable() { 38 if (cur_bytes_ > max_bytes_) 39 return 0; 40 41 return max_bytes_ - cur_bytes_; 42} 43 44bool FIFOPacket::IsFull() { 45 return cur_bytes_ >= max_bytes_; 46} 47 48Packet* FIFOPacket::PeekPacket() { 49 if (packets_.empty()) 50 return NULL; 51 52 return packets_.back(); 53} 54 55Packet* FIFOPacket::ReadPacket() { 56 if (packets_.empty()) 57 return NULL; 58 59 Packet* out = packets_.back(); 60 packets_.pop_back(); 61 62 cur_bytes_ -= out->len(); 63 return out; 64} 65 66void FIFOPacket::WritePacket(Packet* packet) { 67 cur_bytes_ += packet->len(); 68 packets_.push_front(packet); 69} 70 71} // namespace nacl_io 72