00001 /* -*- mode: c++; c-basic-offset: 4; -*- */ 00002 #ifndef LMSG_BUFFER_HH 00003 #define LMSG_BUFFER_HH 00004 #include "lmsg/MsgHeader.hh" 00005 00006 namespace lmsg { 00007 class BufferPool; 00008 class MsgHeader; 00009 00016 class Buffer { 00017 public: 00026 Buffer(size_type size, char* data=0); 00027 00031 ~Buffer(void); 00032 00033 //------------------------------ Accessors 00034 00039 const char* getBuffer(void) const; 00040 00045 const char* getDataAddr(void) const; 00046 00052 const MsgHeader& getHeader(void) const; 00053 00058 size_type getLength(void) const; 00059 00064 size_type getSize(void) const; 00065 00070 size_type getDataSize(void) const; 00071 00076 size_type getDataLength(void) const; 00077 00078 //------------------------------ Mutators 00083 char* getBuffer(void); 00084 00089 char* getDataAddr(void); 00090 00091 00097 MsgHeader& getHeader(void); 00098 00102 void Return(void); 00103 00108 void setLength(size_type length); 00109 00115 void setDataLength(size_type length); 00116 00121 void setPool(BufferPool& pool); 00122 private: 00123 size_type mSize; 00124 size_type mLength; 00125 BufferPool* mPool; 00126 char* mData; 00127 bool mLocalData; 00128 }; // Buffer class 00129 } // namespace lmsg 00130 00131 inline const char* 00132 lmsg::Buffer::getBuffer(void) const { 00133 return mData; 00134 } 00135 00136 inline char* 00137 lmsg::Buffer::getBuffer(void) { 00138 return mData; 00139 } 00140 00141 inline const char* 00142 lmsg::Buffer::getDataAddr(void) const { 00143 return mData + sizeof(MsgHeader); 00144 } 00145 00146 inline char* 00147 lmsg::Buffer::getDataAddr(void) { 00148 return mData + sizeof(MsgHeader); 00149 } 00150 00151 inline lmsg::size_type 00152 lmsg::Buffer::getDataLength(void) const { 00153 return mLength - sizeof(MsgHeader); 00154 } 00155 00156 inline lmsg::size_type 00157 lmsg::Buffer::getDataSize(void) const { 00158 return mSize - sizeof(MsgHeader); 00159 } 00160 00161 inline const lmsg::MsgHeader& 00162 lmsg::Buffer::getHeader(void) const { 00163 return *(const MsgHeader*)mData; 00164 } 00165 00166 inline lmsg::MsgHeader& 00167 lmsg::Buffer::getHeader(void) { 00168 return *(MsgHeader*)mData; 00169 } 00170 00171 inline lmsg::size_type 00172 lmsg::Buffer::getLength(void) const { 00173 return mLength; 00174 } 00175 00176 inline lmsg::size_type 00177 lmsg::Buffer::getSize(void) const { 00178 return mSize; 00179 } 00180 00181 #endif // LMSG_BUFFER_HH
1.5.4