00001 #ifndef CLASSLIB_READ_WRITE_BUFFER_H 00002 # define CLASSLIB_READ_WRITE_BUFFER_H 00003 00004 //<<<<<< INCLUDES >>>>>> 00005 00006 # include "classlib/sysapi/system.h" 00007 # include "classlib/sysapi/IOTypes.h" 00008 00009 namespace lat { 00010 //<<<<<< PUBLIC DEFINES >>>>>> 00011 //<<<<<< PUBLIC CONSTANTS >>>>>> 00012 //<<<<<< PUBLIC TYPES >>>>>> 00013 //<<<<<< PUBLIC VARIABLES >>>>>> 00014 //<<<<<< PUBLIC FUNCTIONS >>>>>> 00015 //<<<<<< CLASS DECLARATIONS >>>>>> 00016 00068 class ReadWriteBuffer 00069 { 00070 public: 00071 enum { DEFAULT_SIZE = 4096 }; //< Default buffer size 00072 00073 ReadWriteBuffer (IOSize busize = DEFAULT_SIZE); 00074 ReadWriteBuffer (const ReadWriteBuffer &x); 00075 ReadWriteBuffer &operator= (const ReadWriteBuffer &x); 00076 ~ReadWriteBuffer (void); 00077 00078 IOSize left (void) const; 00079 IOSize capacity (void) const; 00080 ptrdiff_t offset (void) const; 00081 //int /* ptrdiff_t */ offset (void) const; // FIXME! 00082 00083 unsigned char * pback (void) const; 00084 unsigned char * dirty (void) const; 00085 unsigned char * buffer (void) const; 00086 unsigned char * current (void) const; 00087 unsigned char * end (void) const; 00088 unsigned char * limit (void) const; 00089 unsigned char * reference (void) const; 00090 00091 void reset (void); 00092 00093 void bump (IOSize n); 00094 void put (const void *data, IOSize n); 00095 void taken (IOSize n); 00096 00097 void filled (IOSize n); 00098 void skip (IOSize n); 00099 void get (void *data, IOSize n); 00100 void unget (const void *data, IOSize n); 00101 00102 private: 00103 unsigned char *m_buffer; //< Start of allocated buffer. 00104 unsigned char *m_current; //< Current read/write position. 00105 unsigned char *m_end; //< End of buffered data. 00106 unsigned char *m_limit; //< One past end of allocated buffer. 00107 unsigned char *m_reference; //< External file pointer location. 00108 unsigned char *m_pback; //< Null or records end of push-back area. 00109 unsigned char *m_dirty; //< Null or records start of dirty data. 00110 }; 00111 00112 //<<<<<< INLINE PUBLIC FUNCTIONS >>>>>> 00113 //<<<<<< INLINE MEMBER FUNCTIONS >>>>>> 00114 00115 } // namespace lat 00116 #endif // CLASSLIB_READ_WRITE_BUFFER_H