1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_TOOLS_FLIP_SERVER_BUFFER_INTERFACE_H__ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_TOOLS_FLIP_SERVER_BUFFER_INTERFACE_H__ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net { 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass BufferInterface { 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the bytes which can be read from the buffer. There is no 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // guarantee that the bytes are contiguous. 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int ReadableBytes() const = 0; 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // returns the size of this buffer 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns: 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // size of this buffer. 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int BufferSize() const = 0; 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // returns the number of bytes free in this buffer. 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns: 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // number of bytes free. 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int BytesFree() const = 0; 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if empty. 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns: 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // true - if empty 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // false - otherwise 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual bool Empty() const = 0; 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if the buffer is full. 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual bool Full() const = 0; 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // returns the number of characters written. 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // appends up-to-'size' bytes to the buffer. 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Args: 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // bytes - bytes which are read, and copied into the buffer. 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // size - number of bytes which are read and copied. 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // this number shall be >= 0. 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int Write(const char* bytes, int size) = 0; 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Gets a pointer which can be written to (assigned to). 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // this pointer (and size) can be used in functions like 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // recv() or read(), etc. 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If *size is zero upon returning from this function, that it 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // is unsafe to dereference *ptr. 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Args: 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ptr - assigned a pointer to which we can write 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // size - the amount of data (in bytes) that it is safe to write to ptr. 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void GetWritablePtr(char **ptr, int* size) const = 0; 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Gets a pointer which can be read from 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // this pointer (and size) can be used in functions like 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // send() or write(), etc. 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If *size is zero upon returning from this function, that it 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // is unsafe to dereference *ptr. 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Args: 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ptr - assigned a pointer from which we may read 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // size - the amount of data (in bytes) that it is safe to read 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void GetReadablePtr(char **ptr, int* size) const = 0; 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Reads bytes out of the buffer, and writes them into 'bytes'. 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the number of bytes read. 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Consumes bytes from the buffer (possibly, but not necessarily 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // rendering them free) 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Args: 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // bytes - the pointer into which bytes are read from this buffer 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // and written into 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // size - number of bytes which are read and copied. 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // this number shall be >= 0. 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns: 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the number of bytes read from 'bytes' 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual int Read(char* bytes, int size) = 0; 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // removes all data from the buffer 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void Clear() = 0; 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // reserves contiguous writable empty space in the buffer of size bytes. 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if the reservation is successful. 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If a derive class chooses not to implement reservation, its 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // implementation should return false. 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual bool Reserve(int size) = 0; 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // removes the oldest 'amount_to_consume' characters from this buffer, 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Args: 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // amount_to_advance - .. this should be self-explanatory =) 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // this number shall be >= 0. 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void AdvanceReadablePtr(int amount_to_advance) = 0; 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Summary: 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Moves the internal pointers around such that the 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // amount of data specified here is expected to 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // already be resident (as if it was Written) 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Args: 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // amount_to_advance - self explanatory. 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // this number shall be >= 0. 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void AdvanceWritablePtr(int amount_to_advance) = 0; 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~BufferInterface() {} 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected: 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott BufferInterface() {} 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace net 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_TOOLS_FLIP_SERVER_BUFFER_INTERFACE__H__ 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 123