| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::GetMessageHead
- // Description : This will get a pointer to the fist undelivered data in buffer
- // Return type : char *
- // Argument : void
- //////////////////////////////////////////////////////////
- inline char * RingBuffer_Slide::GetMessageHead(void)
- {
- return _Buffer+_StartPos;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::GetBufferOpen
- // Description : This will get the first writabe section of the buffer space
- // Return type :
- // Argument : void
- //////////////////////////////////////////////////////////
- inline char * RingBuffer_Slide::GetBufferOpen(void)
- {
- return _Buffer+_EndPos;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::ForceWindowSlide
- // Description : Will force a compression of data // shift left to start position
- // Return type : inline void
- // Argument : void
- //////////////////////////////////////////////////////////
- inline void RingBuffer_Slide::ForceWindowSlide(void)
- {
- size_t len = AmountBuffered();
- if(len > 0 && _StartPos != 0) // basic flush left..
- {
- memmove(_Buffer,GetMessageHead(),len);
- _StartPos = 0;
- _EndPos = len;
- }
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::AmountBuffered
- // Description : Will report the number of unread chars in buffer
- // Return type : int
- // Argument : void
- //////////////////////////////////////////////////////////
- inline size_t RingBuffer_Slide::AmountBuffered(void)
- {
- return _EndPos - _StartPos;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::BufferAvailabe
- // Description : Will report amount of data that is contiguas that can be writen at
- // the location returned by GetBufferOpen
- // Return type : inline int
- // Argument : void
- //////////////////////////////////////////////////////////
- inline size_t RingBuffer_Slide::BufferAvailabe(void)
- {
- return GetBufferSize() - _EndPos;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::ResetContent
- // Description : Throw away all inread information
- // Return type : void
- // Argument : void
- //////////////////////////////////////////////////////////
- void RingBuffer_Slide::ResetContent(void)
- {
- _StartPos = 0;
- _EndPos = 0;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::RingBuffer_Slide
- // Description :
- // Return type : inline
- // Argument : int in_size
- //////////////////////////////////////////////////////////
- inline RingBuffer_Slide::RingBuffer_Slide(size_t in_size) : MemBuffer(in_size)
- {
- _EndPos = 0;
- _StartPos = 0;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::FullCompress
- // Description : Force a compress of the data
- // Return type : inline void
- // Argument : void
- //////////////////////////////////////////////////////////
- inline void RingBuffer_Slide::FullCompress(void)
- {
- if(_StartPos == _EndPos)
- {
- _StartPos = 0;
- _EndPos = 0;
- }
- else
- {
- ForceWindowSlide();
- }
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::Compress
- // Description : Try and do a intelegent compress of the data space
- // the algorithem is really stupid right know.. just say if i have
- // read past 1/2 my space do a compress...Im open for sugestions
- //
- //
- // Return type : inline void
- // Argument : void
- //////////////////////////////////////////////////////////
- inline void RingBuffer_Slide::Compress(void)
- {
- if(_StartPos == _EndPos)
- {
- _StartPos = 0;
- _EndPos = 0;
- }
- else if(_StartPos >= GetBufferSize() / 2)
- {
- ForceWindowSlide();
- }
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::Put
- // Description : Adds Data to a ring Buffer
- // Will do a compress if needed so pointers suplied by Get Call are no longer valide
- //
- // Return type : inline bool
- // Argument : char * data
- // Argument : int len
- //////////////////////////////////////////////////////////
- inline bool RingBuffer_Slide::Put(const char * data, size_t len)
- {
- bool answer = false;
-
- if(len > BufferAvailabe() )
- Compress();
-
- if(len <= BufferAvailabe() )
- {
- memcpy(GetBufferOpen(),data,len);
- _EndPos += len;
- answer = true;
- }
- return answer;
- }
- ////////////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::PutFast
- // Description :
- //
- // Return type : inline bool
- // Argument : const char * data
- // Argument : int len
- ////////////////////////////////////////////////////////////////////
- inline bool RingBuffer_Slide::PutFast(const char * data, size_t len)
- {
- // no checking be carefull
- memcpy(GetBufferOpen(),data,len); // should i be using memcopy..
- _EndPos += len;
- return true;
- }
- /////////////////////////////////////////////////////////////
- // Function name : RingBuffer_Slide::Get
- // Description : will copy the data ..
- // false indicates not enogh data to read .. sorry...
- //
- // Return type : inline bool
- // Argument : char * data
- // Argument : int len
- //////////////////////////////////////////////////////////
- inline bool RingBuffer_Slide::Get(char * data, size_t len)
- {
- bool answer = false;
-
- if(len <= AmountBuffered() )
- {
- memcpy(data,GetMessageHead(),len);
- _StartPos += len;
- Compress();
- answer = true;
- }
- return answer;
- }
|