CQUEUE::CQUEUE(int iQueueLength) { //InitializexCriticalSection(&csQueueAccess); // *** cs for access to queue if (buf = (int *)malloc(iQueueLength * sizeof(int))) len = iQueueLength; else len = 0; ri = 0; wi = 0; } CQUEUE::~CQUEUE() { } //------------------------------------------------------------------------- int CQUEUE::write_que_int(int value) { int i; i = (len + ri - wi - 1) % len; //i = space in buffer if (i>0) //if enough space { buf[wi] = value; //tranfer value wi = (wi + 1) % len; //increment write index return(1); //successfully transmitted one int } else return(0); } //------------------------------------------------------------------------- int CQUEUE::read_que_int(int* value) { int i; i = (len - ri + wi) % len; //i = contents in buffer if (i>0) //if still one value to read { *value = buf[ri]; //tranfer value ri = (ri + 1) % len; //increment read index return(1); //successfully received one int } else return(0); } }//------------------------------------------------------------------------- int CQUEUE::get_que_space() // space in buffer { return((len + ri - wi - 1) % len); } //------------------------------------------------------------------------- int CQUEUE::que_contents() // contents in buffer { return((len - ri + wi) % len); } //------------------------------------------------------------------------- // clears unconditionally the queue // returns TRUE if queue was already empty //------------------------------------------------------------------------- void CQUEUE::Clear(void) { /* BOOL bWasEmpty = (ri == wi); if(!bWasEmpty) int dummy = 0; // debug */ ri = wi; return; } //-------------------------------------------------------------------------