14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef NET_TOOLS_BALSA_BUFFER_INTERFACE_H__ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define NET_TOOLS_BALSA_BUFFER_INTERFACE_H__ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BufferInterface { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the bytes which can be read from the buffer. There is no 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // guarantee that the bytes are contiguous. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int ReadableBytes() const = 0; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the size of this buffer 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size of this buffer. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int BufferSize() const = 0; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the number of bytes free in this buffer. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // number of bytes free. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int BytesFree() const = 0; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if empty. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true - if empty 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false - otherwise 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Empty() const = 0; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the buffer is full. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Full() const = 0; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the number of characters written. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // appends up-to-'size' bytes to the buffer. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bytes - bytes which are read, and copied into the buffer. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size - number of bytes which are read and copied. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this number shall be >= 0. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int Write(const char* bytes, int size) = 0; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets a pointer which can be written to (assigned to). 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this pointer (and size) can be used in functions like 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // recv() or read(), etc. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If *size is zero upon returning from this function, that it 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is unsafe to dereference *ptr. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ptr - assigned a pointer to which we can write 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size - the amount of data (in bytes) that it is safe to write to ptr. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetWritablePtr(char **ptr, int* size) const = 0; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets a pointer which can be read from 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this pointer (and size) can be used in functions like 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // send() or write(), etc. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If *size is zero upon returning from this function, that it 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is unsafe to dereference *ptr. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ptr - assigned a pointer from which we may read 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size - the amount of data (in bytes) that it is safe to read 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetReadablePtr(char **ptr, int* size) const = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reads bytes out of the buffer, and writes them into 'bytes'. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the number of bytes read. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Consumes bytes from the buffer (possibly, but not necessarily 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rendering them free) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bytes - the pointer into which bytes are read from this buffer 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and written into 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // size - number of bytes which are read and copied. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this number shall be >= 0. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the number of bytes read from 'bytes' 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int Read(char* bytes, int size) = 0; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removes all data from the buffer 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Clear() = 0; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reserves contiguous writable empty space in the buffer of size bytes. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the reservation is successful. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If a derive class chooses not to implement reservation, its 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // implementation should return false. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Reserve(int size) = 0; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removes the oldest 'amount_to_consume' characters from this buffer, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // amount_to_advance - .. this should be self-explanatory =) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this number shall be >= 0. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AdvanceReadablePtr(int amount_to_advance) = 0; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Summary: 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Moves the internal pointers around such that the 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // amount of data specified here is expected to 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // already be resident (as if it was Written) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Args: 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // amount_to_advance - self explanatory. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this number shall be >= 0. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AdvanceWritablePtr(int amount_to_advance) = 0; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BufferInterface() {} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BufferInterface() {} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // NET_TOOLS_BALSA_BUFFER_INTERFACE__H__ 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122