#include <buf_fifo.h>
CBufFIFO fifo; fifo.resize(10000); vector<uint8> vec; vec.resize(rand()%256); memset (&(vec[0]), '-', vec.size()); // push the vector fifo.push(vec); // display the fifo fifo.display(); vector<uint8> vec2; // get the vector fifo.pop(vec2);
Nevrax France
Definition at line 64 of file buf_fifo.h.
Public Member Functions | |
CBufFIFO () | |
void | clear () |
Erase the FIFO. | |
void | display () |
display the FIFO to stdout (used to debug the FIFO) | |
void | displayStats (CLog *log=InfoLog) |
display the FIFO statistics (speed, nbcall, etc...) to stdout | |
bool | empty () |
Return true if the FIFO is empty. | |
void | front (uint8 *&buffer, uint32 &size) |
void | front (NLMISC::CMemStream &buffer) |
void | front (std::vector< uint8 > &buffer) |
Get the buffer in the tail of the FIFO and put it in 'buffer'. | |
uint8 | frontLast () |
void | pop () |
Pop the buffer in the tail of the FIFO. | |
void | push (const std::vector< uint8 > &buffer1, const std::vector< uint8 > &buffer2) |
Concate and push 'buffer1' and buffer2 in the head of the FIFO. The goal is to avoid a copy. | |
void | push (const uint8 *buffer, uint32 size) |
void | push (const NLMISC::CMemStream &buffer) |
void | push (const std::vector< uint8 > &buffer) |
Push 'buffer' in the head of the FIFO. | |
void | resize (uint32 size) |
Set the size of the FIFO buffer in byte. | |
uint32 | size () |
Returns the size of the FIFO. | |
~CBufFIFO () | |
Private Types | |
typedef uint32 | TFifoSize |
Private Member Functions | |
bool | canFit (uint32 size) |
Private Attributes | |
uint32 | _BiggestBlock |
uint32 | _BiggestBuffer |
uint8 * | _Buffer |
uint32 | _BufferSize |
bool | _Empty |
uint32 | _Fronted |
TTicks | _FrontedTime |
uint8 * | _Head |
uint32 | _Pushed |
TTicks | _PushedTime |
uint32 | _Resized |
TTicks | _ResizedTime |
uint8 * | _Rewinder |
uint32 | _SmallestBlock |
uint32 | _SmallestBuffer |
uint8 * | _Tail |
|
Definition at line 117 of file buf_fifo.h. Referenced by front(), frontLast(), pop(), and push(). |
|
Definition at line 42 of file buf_fifo.cpp. References _BiggestBlock, _BiggestBuffer, _Fronted, _FrontedTime, _Pushed, _PushedTime, _Resized, _ResizedTime, _SmallestBlock, and _SmallestBuffer.
00042 : _Buffer(NULL), _BufferSize(0), _Empty(true), _Head(NULL), _Tail(NULL), _Rewinder(NULL) 00043 { 00044 // reset statistic 00045 _BiggestBlock = 0; 00046 _SmallestBlock = 999999999; 00047 _BiggestBuffer = 0; 00048 _SmallestBuffer = 999999999; 00049 _Pushed = 0; 00050 _Fronted = 0; 00051 _Resized = 0; 00052 _PushedTime = 0; 00053 _FrontedTime = 0; 00054 _ResizedTime = 0; 00055 } |
|
Definition at line 57 of file buf_fifo.cpp. References nldebug.
|
|
Definition at line 606 of file buf_fifo.cpp. References _BufferSize, _Head, _Tail, nldebug, and s. Referenced by push().
00607 { 00608 if (_Tail == _Head) 00609 { 00610 if (empty()) 00611 { 00612 // is the buffer large enough? 00613 if (_BufferSize >= s) 00614 { 00615 // reset the pointer 00616 #if DEBUG_FIFO 00617 nldebug("%p reset tail and head", this); 00618 #endif 00619 _Head = _Tail = _Buffer; 00620 return true; 00621 } 00622 else 00623 { 00624 // buffer not big enough 00625 #if DEBUG_FIFO 00626 nldebug("%p buffer full buffersize<size", this); 00627 #endif 00628 return false; 00629 } 00630 } 00631 else 00632 { 00633 // buffer full 00634 #if DEBUG_FIFO 00635 nldebug("%p buffer full h=t", this); 00636 #endif 00637 return false; 00638 } 00639 } 00640 else if (_Tail < _Head) 00641 { 00642 if (_Buffer + _BufferSize - _Head >= (sint32) s) 00643 { 00644 // can fit after _Head 00645 #if DEBUG_FIFO 00646 nldebug("%p fit after", this); 00647 #endif 00648 return true; 00649 } 00650 else if (_Tail - _Buffer >= (sint32) s) 00651 { 00652 // can fit at the beginning 00653 #if DEBUG_FIFO 00654 nldebug("%p fit at beginning", this); 00655 #endif 00656 _Rewinder = _Head; 00657 #if DEBUG_FIFO 00658 nldebug("%p set the rewinder", this); 00659 #endif 00660 _Head = _Buffer; 00661 return true; 00662 } 00663 else 00664 { 00665 // can't fit 00666 #if DEBUG_FIFO 00667 nldebug("%p no room t<h", this); 00668 #endif 00669 return false; 00670 } 00671 } 00672 else // the last case is : if (_Tail > _Head) 00673 { 00674 if (_Tail - _Head >= (sint32) s) 00675 { 00676 #if DEBUG_FIFO 00677 nldebug("%p fit t>h", this); 00678 #endif 00679 return true; 00680 } 00681 else 00682 { 00683 #if DEBUG_FIFO 00684 nldebug("%p no room t>h", this); 00685 #endif 00686 return false; 00687 } 00688 } 00689 nlstop; 00690 } |
|
Erase the FIFO.
Definition at line 403 of file buf_fifo.cpp. References _Head, _Rewinder, and _Tail.
|
|
display the FIFO to stdout (used to debug the FIFO)
Definition at line 540 of file buf_fifo.cpp. References _BufferSize, _Head, _Rewinder, _Tail, NLMISC::DebugLog, NLMISC::CLog::display(), empty(), s, sint32, NLMISC::smprintf(), uint32, and uint8. Referenced by front(), pop(), push(), and resize().
00541 { 00542 int s = 64; 00543 int gran = s/30; 00544 00545 char str[1024]; 00546 00547 smprintf(str, 1024, "%p %p (%5d %5d) %p %p %p ", this, _Buffer, _BufferSize, CBufFIFO::size(), _Rewinder, _Tail, _Head); 00548 00549 int i; 00550 for (i = 0; i < (sint32) _BufferSize; i+= gran) 00551 { 00552 uint8 *pos = _Buffer + i; 00553 if (_Tail >= pos && _Tail < pos + gran) 00554 { 00555 if (_Head >= pos && _Head < pos + gran) 00556 { 00557 if (_Rewinder != NULL && _Rewinder >= pos && _Rewinder < pos + gran) 00558 { 00559 strncat (str, "*", 1024); 00560 } 00561 else 00562 { 00563 strncat (str, "@", 1024); } } else { strncat (str, "T", 1024); 00564 } 00565 } 00566 else if (_Head >= pos && _Head < pos + gran) 00567 { 00568 strncat (str, "H", 1024); 00569 } 00570 else if (_Rewinder != NULL && _Rewinder >= pos && _Rewinder < pos + gran) 00571 { 00572 strncat (str, "R", 1024); 00573 } 00574 else 00575 { 00576 if (strlen(str) < 1023) 00577 { 00578 uint32 p = strlen(str); 00579 if (isprint(*pos)) 00580 str[p] = *pos; 00581 else 00582 str[p] = '$'; 00583 00584 str[p+1] = '\0'; 00585 } 00586 } 00587 } 00588 00589 for (; i < s; i+= gran) 00590 { 00591 strncat (str, " ", 1024); 00592 } 00593 #ifdef NL_DEBUG 00594 strncat (str, "\n", 1024); 00595 #else 00596 strncat (str, "\r", 1024); 00597 #endif 00598 DebugLog->display (str); 00599 } 00600 |
|
display the FIFO statistics (speed, nbcall, etc...) to stdout
Definition at line 528 of file buf_fifo.cpp. References _BiggestBlock, _BiggestBuffer, _BufferSize, _Fronted, _FrontedTime, _Pushed, _PushedTime, _Resized, _ResizedTime, _SmallestBlock, _SmallestBuffer, NLMISC::CLog::displayNL(), NL_I64, sint64, and size(). Referenced by NLNET::CBufServer::displaySendQueueStat(), and NLNET::CBufClient::displaySendQueueStat().
00529 { 00530 log->displayNL ("%p CurrentQueueSize: %d, TotalQueueSize: %d", this, size(), _BufferSize); 00531 log->displayNL ("%p InQueue: %d", this, _Pushed - _Fronted); 00532 00533 log->displayNL ("%p BiggestBlock: %d, SmallestBlock: %d", this, _BiggestBlock, _SmallestBlock); 00534 log->displayNL ("%p BiggestBuffer: %d, SmallestBuffer: %d", this, _BiggestBuffer, _SmallestBuffer); 00535 log->displayNL ("%p Pushed: %d, PushedTime: total %"NL_I64"d ticks, mean %f ticks", this, _Pushed, _PushedTime, (_Pushed>0?(double)(sint64)_PushedTime / (double)_Pushed:0.0)); 00536 log->displayNL ("%p Fronted: %d, FrontedTime: total %"NL_I64"d ticks, mean %f ticks", this, _Fronted, _FrontedTime, (_Fronted>0?(double)(sint64)_FrontedTime / (double)_Fronted:0.0)); 00537 log->displayNL ("%p Resized: %d, ResizedTime: total %"NL_I64"d ticks, mean %f ticks", this, _Resized, _ResizedTime, (_Resized>0?(double)(sint64)_ResizedTime / (double)_Resized:0.0)); 00538 } |
|
Return true if the FIFO is empty.
Definition at line 100 of file buf_fifo.h. Referenced by display(), NLNET::CBufSock::flush(), front(), frontLast(), pop(), resize(), and size().
00100 { return _Empty; } |
|
Definition at line 354 of file buf_fifo.cpp. References _Fronted, _FrontedTime, _Rewinder, _Tail, buffer, display(), empty(), nldebug, nlwarning, s, TFifoSize, NLMISC::TTicks, uint32, and uint8.
00355 { 00356 #if STAT_FIFO 00357 TTicks before = CTime::getPerformanceTime (); 00358 #endif 00359 00360 uint8 *tail = _Tail; 00361 00362 if (empty ()) 00363 { 00364 nlwarning("BF: Try to get the front of an empty fifo!"); 00365 return; 00366 } 00367 00368 _Fronted++; 00369 00370 if (_Rewinder != NULL && tail == _Rewinder) 00371 { 00372 #if DEBUG_FIFO 00373 nldebug("%p front rewind!", this); 00374 #endif 00375 00376 // need to rewind 00377 tail = _Buffer; 00378 } 00379 00380 s = *(TFifoSize *)tail; 00381 00382 #if DEBUG_FIFO 00383 nldebug("%p front(%d)", this, s); 00384 #endif 00385 00386 tail += sizeof (TFifoSize); 00387 00388 #if STAT_FIFO 00389 // stat code 00390 TTicks after = CTime::getPerformanceTime (); 00391 _FrontedTime += after - before; 00392 #endif 00393 00394 #if DEBUG_FIFO 00395 display (); 00396 #endif 00397 00398 buffer = tail; 00399 } |
|
Definition at line 296 of file buf_fifo.cpp. References buffer, front(), s, uint32, and uint8.
00297 { 00298 uint8 *tmpbuffer; 00299 uint32 s; 00300 00301 buffer.clear (); 00302 00303 front (tmpbuffer, s); 00304 00305 buffer.fill (tmpbuffer, s); 00306 00307 /* 00308 TTicks before = CTime::getPerformanceTime (); 00309 00310 uint8 *tail = _Tail; 00311 00312 buffer.clear (); 00313 00314 if (empty ()) 00315 { 00316 nlwarning("Try to get the front of an empty fifo!"); 00317 return; 00318 } 00319 00320 _Fronted++; 00321 00322 if (_Rewinder != NULL && tail == _Rewinder) 00323 { 00324 #if DEBUG_FIFO 00325 nldebug("%p front rewind!", this); 00326 #endif 00327 00328 // need to rewind 00329 tail = _Buffer; 00330 } 00331 00332 TFifoSize size = *(TFifoSize *)tail; 00333 00334 #if DEBUG_FIFO 00335 nldebug("%p front(%d)", this, size); 00336 #endif 00337 00338 tail += sizeof (TFifoSize); 00339 00340 //buffer.resize (size); 00341 //CFastMem::memcpy (&(buffer[0]), tail, size); 00342 00343 buffer.fill (tail, size); 00344 00345 // stat code 00346 TTicks after = CTime::getPerformanceTime (); 00347 _FrontedTime += after - before; 00348 00349 #if DEBUG_FIFO 00350 display (); 00351 #endif*/ 00352 } |
|
Get the buffer in the tail of the FIFO and put it in 'buffer'.
Definition at line 237 of file buf_fifo.cpp. References buffer, s, uint32, and uint8. Referenced by NLNET::CBufSock::flush(), and front().
00238 { 00239 uint8 *tmpbuffer; 00240 uint32 s; 00241 00242 buffer.clear (); 00243 00244 front (tmpbuffer, s); 00245 00246 buffer.resize (s); 00247 00248 CFastMem::memcpy (&(buffer[0]), tmpbuffer, s); 00249 00250 /* TTicks before = CTime::getPerformanceTime (); 00251 00252 uint8 *tail = _Tail; 00253 00254 buffer.clear (); 00255 00256 if (empty ()) 00257 { 00258 nlwarning("Try to get the front of an empty fifo!"); 00259 return; 00260 } 00261 00262 _Fronted++; 00263 00264 if (_Rewinder != NULL && tail == _Rewinder) 00265 { 00266 #if DEBUG_FIFO 00267 nldebug("%p front rewind!", this); 00268 #endif 00269 00270 // need to rewind 00271 tail = _Buffer; 00272 } 00273 00274 TFifoSize size = *(TFifoSize *)tail; 00275 00276 #if DEBUG_FIFO 00277 nldebug("%p front(%d)", this, size); 00278 #endif 00279 00280 tail += sizeof (TFifoSize); 00281 00282 buffer.resize (size); 00283 00284 CFastMem::memcpy (&(buffer[0]), tail, size); 00285 00286 // stat code 00287 TTicks after = CTime::getPerformanceTime (); 00288 _FrontedTime += after - before; 00289 00290 #if DEBUG_FIFO 00291 display (); 00292 #endif 00293 */} |
|
This function returns the last byte of the front message It is used by the network to know a value quickly without doing front() Definition at line 207 of file buf_fifo.cpp. References _Rewinder, _Tail, empty(), nldebug, nlwarning, s, size, TFifoSize, and uint8.
00208 { 00209 uint8 *tail = _Tail; 00210 00211 if (empty ()) 00212 { 00213 nlwarning("BF: Try to get the front of an empty fifo!"); 00214 return 0; 00215 } 00216 00217 if (_Rewinder != NULL && tail == _Rewinder) 00218 { 00219 #if DEBUG_FIFO 00220 nldebug("%p front rewind!", this); 00221 #endif 00222 00223 // need to rewind 00224 tail = _Buffer; 00225 } 00226 00227 TFifoSize s = *(TFifoSize *)tail; 00228 00229 #if DEBUG_FIFO 00230 nldebug("%p frontLast() returns %d ", this, s, *(tail+sizeof(TFifoSize)+size-1)); 00231 #endif 00232 00233 return *(tail+sizeof(TFifoSize)+s-1); 00234 } |
|
Pop the buffer in the tail of the FIFO.
Definition at line 168 of file buf_fifo.cpp. References _Head, _Rewinder, _Tail, display(), empty(), nldebug, nlwarning, s, and TFifoSize. Referenced by NLNET::CBufSock::flush().
00169 { 00170 if (empty ()) 00171 { 00172 nlwarning("BF: Try to pop an empty fifo!"); 00173 return; 00174 } 00175 00176 if (_Rewinder != NULL && _Tail == _Rewinder) 00177 { 00178 #if DEBUG_FIFO 00179 nldebug("%p pop rewind!", this); 00180 #endif 00181 00182 // need to rewind 00183 _Tail = _Buffer; 00184 _Rewinder = NULL; 00185 } 00186 00187 TFifoSize s = *(TFifoSize *)_Tail; 00188 00189 #if DEBUG_FIFO 00190 nldebug("%p pop(%d)", this, s); 00191 #endif 00192 00193 #ifdef NL_DEBUG 00194 // clear the message to be sure user doesn't use it anymore 00195 memset (_Tail, '-', s + sizeof (TFifoSize)); 00196 #endif 00197 00198 _Tail += s + sizeof (TFifoSize); 00199 00200 if (_Tail == _Head) _Empty = true; 00201 00202 #if DEBUG_FIFO 00203 display (); 00204 #endif 00205 } |
|
Concate and push 'buffer1' and buffer2 in the head of the FIFO. The goal is to avoid a copy.
Definition at line 113 of file buf_fifo.cpp. References _BiggestBlock, _BufferSize, _Head, _Pushed, _PushedTime, _SmallestBlock, canFit(), display(), nlassert, nldebug, resize(), s, size(), TFifoSize, and NLMISC::TTicks.
00114 { 00115 #if STAT_FIFO 00116 TTicks before = CTime::getPerformanceTime(); 00117 #endif 00118 00119 TFifoSize s = buffer1.size() + buffer2.size(); 00120 00121 #if DEBUG_FIFO 00122 nldebug("%p push2(%d)", this, s); 00123 #endif 00124 00125 nlassert((buffer1.size() + buffer2.size ()) > 0 && (buffer1.size() + buffer2.size ()) < pow(2, sizeof(TFifoSize)*8)); 00126 00127 // avoid too big fifo 00128 if (this->size() > 10000000) 00129 { 00130 throw Exception ("CBufFIFO::push(): stack full (more than 10mb)"); 00131 } 00132 00133 00134 // stat code 00135 if (s > _BiggestBlock) _BiggestBlock = s; 00136 if (s < _SmallestBlock) _SmallestBlock = s; 00137 00138 _Pushed++; 00139 00140 // resize while the buffer is enough big to accept the block 00141 while (!canFit (s + sizeof (TFifoSize))) 00142 { 00143 resize(_BufferSize * 2); 00144 } 00145 00146 // store the size of the block 00147 *(TFifoSize *)_Head = s; 00148 _Head += sizeof(TFifoSize); 00149 00150 // store the block itself 00151 CFastMem::memcpy(_Head, &(buffer1[0]), buffer1.size()); 00152 CFastMem::memcpy(_Head + buffer1.size(), &(buffer2[0]), buffer2.size()); 00153 _Head += s; 00154 00155 _Empty = false; 00156 00157 #if STAT_FIFO 00158 // stat code 00159 TTicks after = CTime::getPerformanceTime(); 00160 _PushedTime += after - before; 00161 #endif 00162 00163 #if DEBUG_FIFO 00164 display (); 00165 #endif 00166 } |
|
Definition at line 68 of file buf_fifo.cpp. References _BiggestBlock, _BufferSize, _Head, _Pushed, _PushedTime, _SmallestBlock, buffer, canFit(), display(), nlassert, nldebug, resize(), s, TFifoSize, NLMISC::TTicks, uint32, and uint8.
00069 { 00070 // if the buffer is more than 1 meg, there s surely a problem, no? 00071 // nlassert( buffer.size() < 1000000 ); // size check in debug mode 00072 00073 #if STAT_FIFO 00074 TTicks before = CTime::getPerformanceTime(); 00075 #endif 00076 00077 #if DEBUG_FIFO 00078 nldebug("%p push(%d)", this, s); 00079 #endif 00080 00081 nlassert(s > 0 && s < pow(2, sizeof(TFifoSize)*8)); 00082 00083 // stat code 00084 if (s > _BiggestBlock) _BiggestBlock = s; 00085 if (s < _SmallestBlock) _SmallestBlock = s; 00086 _Pushed++; 00087 00088 while (!canFit (s + sizeof (TFifoSize))) 00089 { 00090 resize(_BufferSize * 2); 00091 } 00092 00093 *(TFifoSize *)_Head = s; 00094 _Head += sizeof(TFifoSize); 00095 00096 CFastMem::memcpy(_Head, buffer, s); 00097 00098 _Head += s; 00099 00100 _Empty = false; 00101 00102 #if STAT_FIFO 00103 // stat code 00104 TTicks after = CTime::getPerformanceTime(); 00105 _PushedTime += after - before; 00106 #endif 00107 00108 #if DEBUG_FIFO 00109 display (); 00110 #endif 00111 } |
|
Definition at line 74 of file buf_fifo.h. References buffer, and push().
|
|
Push 'buffer' in the head of the FIFO.
Definition at line 72 of file buf_fifo.h. References buffer. Referenced by push(), and NLNET::CBufSock::pushBuffer().
|
|
Set the size of the FIFO buffer in byte.
Definition at line 437 of file buf_fifo.cpp. References _BiggestBuffer, _BufferSize, _Head, _Resized, _ResizedTime, _Rewinder, _SmallestBuffer, _Tail, display(), empty(), nlassert, nldebug, nlerror, nlwarning, s, size, NLMISC::TTicks, uint, uint32, and uint8. Referenced by push().
00438 { 00439 #if STAT_FIFO 00440 TTicks before = CTime::getPerformanceTime(); 00441 #endif 00442 00443 if (s == 0) s = 100; 00444 00445 #if DEBUG_FIFO 00446 nldebug("%p resize(%d)", this, s); 00447 #endif 00448 00449 if (s > _BiggestBuffer) _BiggestBuffer = s; 00450 if (s < _SmallestBuffer) _SmallestBuffer = s; 00451 00452 _Resized++; 00453 00454 uint32 UsedSize = CBufFIFO::size(); 00455 00456 // creer un nouveau tableau et copie l ancien dans le nouveau. 00457 if (s < _BufferSize && UsedSize > s) 00458 { 00459 // probleme, on a pas assez de place pour caser les datas => on fait pas 00460 nlwarning("BF: Can't resize the FIFO because there's not enough room in the new wanted buffer (%d bytes needed at least)", UsedSize); 00461 return; 00462 } 00463 00464 uint8 *NewBuffer = new uint8[s]; 00465 if (NewBuffer == NULL) 00466 { 00467 nlerror("Not enough memory to resize the FIFO to %u bytes", s); 00468 } 00469 #ifdef NL_DEBUG 00470 // clear the message to be sure user doesn't use it anymore 00471 memset (NewBuffer, '-', s); 00472 #endif 00473 00474 #if DEBUG_FIFO 00475 nldebug("%p new %d bytes", this, s); 00476 #endif 00477 00478 // copy the old buffer to the new one 00479 // if _Tail == _Head => empty fifo, don't copy anything 00480 if (!empty()) 00481 { 00482 if (_Tail < _Head) 00483 { 00484 CFastMem::memcpy (NewBuffer, _Tail, UsedSize); 00485 } 00486 else if (_Tail >= _Head) 00487 { 00488 nlassert (_Rewinder != NULL); 00489 00490 uint size1 = _Rewinder - _Tail; 00491 CFastMem::memcpy (NewBuffer, _Tail, size1); 00492 uint size2 = _Head - _Buffer; 00493 CFastMem::memcpy (NewBuffer + size1, _Buffer, size2); 00494 00495 nlassert (size1+size2==UsedSize); 00496 } 00497 } 00498 00499 // resync the circular pointer 00500 // Warning: don't invert these 2 lines position or it ll not work 00501 _Tail = NewBuffer; 00502 _Head = NewBuffer + UsedSize; 00503 _Rewinder = NULL; 00504 00505 // delete old buffer if needed 00506 if (_Buffer != NULL) 00507 { 00508 delete []_Buffer; 00509 #if DEBUG_FIFO 00510 nldebug ("delete", this); 00511 #endif 00512 } 00513 00514 // affect new buffer 00515 _Buffer = NewBuffer; 00516 _BufferSize = s; 00517 00518 #if STAT_FIFO 00519 TTicks after = CTime::getPerformanceTime(); 00520 _ResizedTime += after - before; 00521 #endif 00522 00523 #if DEBUG_FIFO 00524 display (); 00525 #endif 00526 } |
|
Returns the size of the FIFO.
Definition at line 410 of file buf_fifo.cpp. References _BufferSize, _Head, _Rewinder, _Tail, empty(), nlassert, nlstop, and uint32. Referenced by displayStats(), NLNET::CBufServer::getSendQueueSize(), NLNET::CBufClient::getSendQueueSize(), push(), and NLNET::CBufSock::update().
00411 { 00412 if (empty ()) 00413 { 00414 return 0; 00415 } 00416 else if (_Head == _Tail) 00417 { 00418 // buffer is full 00419 if (_Rewinder == NULL) 00420 return _BufferSize; 00421 else 00422 return _Rewinder - _Buffer; 00423 } 00424 else if (_Head > _Tail) 00425 { 00426 return _Head - _Tail; 00427 } 00428 else if (_Head < _Tail) 00429 { 00430 nlassert (_Rewinder != NULL); 00431 return (_Rewinder - _Tail) + (_Head - _Buffer); 00432 } 00433 nlstop; 00434 return 0; 00435 } |
|
Definition at line 140 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and push(). |
|
Definition at line 142 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and resize(). |
|
Definition at line 120 of file buf_fifo.h. |
|
Definition at line 122 of file buf_fifo.h. Referenced by canFit(), display(), displayStats(), push(), resize(), and size(). |
|
Definition at line 125 of file buf_fifo.h. |
|
Definition at line 145 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and front(). |
|
Definition at line 148 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and front(). |
|
Definition at line 128 of file buf_fifo.h. Referenced by canFit(), clear(), display(), pop(), push(), resize(), and size(). |
|
Definition at line 144 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and push(). |
|
Definition at line 147 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and push(). |
|
Definition at line 146 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and resize(). |
|
Definition at line 149 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and resize(). |
|
Definition at line 132 of file buf_fifo.h. Referenced by clear(), display(), front(), frontLast(), pop(), resize(), and size(). |
|
Definition at line 141 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and push(). |
|
Definition at line 143 of file buf_fifo.h. Referenced by CBufFIFO(), displayStats(), and resize(). |
|
Definition at line 130 of file buf_fifo.h. Referenced by canFit(), clear(), display(), front(), frontLast(), pop(), resize(), and size(). |