1: 
   2: 
   3: /*************
   4: *            *
   5: *  SENTINEL  *
   6: *            *
   7: *************/
   8: 
   9: 
  10: #ifndef WWWI_MIND_BUFFER_H 
  11: #define WWWI_MIND_BUFFER_H 
  12: 
  13: 
  14: /**********************
  15: *                     *
  16: *  COMPILER INCLUDES  *
  17: *                     *
  18: **********************/
  19: 
  20: 
  21: #include "mind.h" 
  22: #include "labellist.h" 
  23: 
  24: 
  25: /*****************
  26: *                *
  27: *  CLASS BUFFER  *
  28: *                *
  29: *****************/
  30: 
  31: 
  32: class Buffer {
  33: public:
  34:                               Buffer(size_t i_szBufferMax);
  35:   template <class SM> void    DumpRange(SM &io_smr, off_t i_of, size_t i_sz) const;
  36:   off_t                       FindInRange(off_t i_ofBegin, off_t i_ofEnd, const unsigned char* ci_ucpFind, size_t i_szFind);
  37:   inline unsigned char        Get(off_t i_of) const;
  38:   inline const unsigned char *GetBuffer(void) const;
  39:   inline off_t                GetPos(void) const;
  40:   inline size_t               GetSize(void) const;
  41:   template <class T> void     PReadNBO(T &o_tr, off_t i_of) const;
  42:   template <class T> void     PWriteNBO(const T &i_tr, off_t i_of);
  43:   template <class T> void     Read(T &o_tr) const;
  44:   bool                        ReadBit(off_t i_off, unsigned char i_ucBit) const;
  45:   void                        ReadBits(bool &o_br7, bool &o_br6, bool &o_br5, bool &o_br4, bool &o_br3, bool &o_br2, bool &o_br1, bool &o_br0) const;
  46:   void                        ReadData(void *o_ptrData, size_t i_szData) const;
  47:   void                        ReadData(void *o_ptrData, size_t i_szData, off_t &io_off) const;
  48:   void                        ReadLabelList(unsigned char *o_ucpOut, size_t i_szOut, unsigned short &o_usLength, bool i_bUseCompression) const;
  49:   void                        ReadLabelList(unsigned char *o_ucpOut, size_t i_szOut, unsigned short &o_usLength, bool i_bUseCompression, off_t &io_ofrPos) const;
  50:   void                        ReadLabelList(LabelListPtr &o_llpr, bool i_bUseCompression) const;
  51: 
  52:   template <class T> void     ReadNBO(T &o_tr) const;
  53:   inline void                 SetPos(off_t i_ofPos);
  54:   inline void                 Truncate(void);
  55:   void                        TryCompression(off_t i_ofStart);
  56:   template <class T> void     Write(const T &i_tr);
  57:   void                        WriteBit(bool i_bBit, off_t i_of, unsigned char i_ucBit);
  58:   void                        WriteBits(bool i_b7, bool i_b6, bool i_b5, bool i_b4, bool i_b3, bool i_b2, bool i_b1, bool i_b0);
  59:   void                        WriteData(const void *i_ptrData, size_t i_szData);
  60:   void                        WriteData(const void *i_ptrData, size_t i_szData, off_t i_of);
  61:   unsigned short              WriteLabelList(LabelListConstPtr ci_llp, bool i_bUseCompression);
  62:   template <class T> void     WriteNBO(const T &i_tr);
  63:                              ~Buffer(void);
  64: 
  65: protected:
  66:   off_t FindPreviousLabelList(off_t i_ofBegin, off_t i_ofEnd, const unsigned char *ci_ucpFind, size_t i_szFind);
  67:   bool  TestLabelList(const unsigned char *i_ucpLabels, size_t i_szLabels, off_t i_ofPos);
  68: 
  69: 
  70: protected:
  71:   unsigned char *m_ucpBuffer;
  72:   size_t         m_szBuffer;
  73:   size_t         m_szBufferMax;
  74:   mutable off_t  m_ofPos;
  75: 
  76: };
  77: typedef Buffer *BufferPtr;
  78: typedef const Buffer *BufferConstPtr;
  79: 
  80: 
  81: /************************
  82: *                       *
  83: *  FUNCTION PROTOTYPES  *
  84: *                       *
  85: ************************/
  86: 
  87: 
  88: ostream& operator<<(ostream& io_smr, const Buffer &ci_bfr);
  89: ostream& operator<<(ostream& io_smr, BufferConstPtr ci_bfp);
  90: 
  91: 
  92: /*********************
  93: *                    *
  94: *  INLINE FUNCTIONS  *
  95: *                    *
  96: *********************/
  97: 
  98: 
  99: #include "buffer.i" 
 100: 
 101: 
 102: /************
 103: *           *
 104: *  THE END  *
 105: *           *
 106: ************/
 107: 
 108: 
 109: #endif 
 110: 
 111: 
 112: