00001 #ifndef BoundedBuffer_CPP
00002 #define BoundedBuffer_CPP
00003
00004 #include "BoundedBuffer.hpp"
00005
00006 BoundedBuffer::BoundedBuffer( size_t sz = BBSIZE )
00007 : front( 0 ), rear( 0 ), count( 0 )
00008 {
00009 size = sz + 1;
00010 buffer = new char[ size ];
00011 empty = new BOOL[ size ];
00012
00013 memset( buffer, 0, size );
00014 memset( empty, 0, size );
00015 }
00016
00017 void BoundedBuffer::enqueue( char item )
00018 {
00019 register size_t r = ( rear + 1 ) % size;
00020
00021 if ( r != front )
00022 {
00023 rear = r;
00024
00025 if ( empty[ rear ] == FALSE )
00026 {
00027 ++count;
00028 buffer[ rear ] = item;
00029
00030 } else {
00031
00032
00033 fprintf( stderr, "\nCannot overwrite the data[%d].\n", rear );
00034 exit( 1 );
00035 }
00036 }
00037 }
00038
00039 char BoundedBuffer::dequeue() {
00040 if ( front != rear ) {
00041 front = ( front+1 ) % size;
00042 }
00043
00044 --count;
00045 register char value = buffer[ front ];
00046
00047
00048 buffer[ front ] = 0;
00049 empty[ front ] = FALSE;
00050
00051
00052 return value;
00053 }
00054
00055 #endif