rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Classes | Public Types | Public Member Functions | Private Types | Private Attributes | List of all members
rlFifo Class Reference

#include <rlfifo.h>

Collaboration diagram for rlFifo:
Collaboration graph
[legend]

Classes

struct  _MessageList_
 

Public Types

enum  FifoEnum { DATA_AVAILABLE =-1, NO_DATA_AVAILABLE =-2, MESSAGE_TO_BIG =-3, FIFO_FULL =-4 }
 

Public Member Functions

 rlFifo (int maxmessages=0)
 
virtual ~rlFifo ()
 
int read (void *buf, int maxlen)
 
int poll ()
 
int write (const void *buf, int len)
 
int printf (const char *format,...)
 

Private Types

typedef struct
rlFifo::_MessageList_ 
MessageList
 

Private Attributes

int maxmes
 
int nmes
 
MessageListlist
 
WSEMAPHORE semaphore
 
pthread_mutex_t mutex
 

Detailed Description

class for a fifo. (first in first out)

Definition at line 25 of file rlfifo.h.

Member Typedef Documentation

Member Enumeration Documentation

Enumerator:
DATA_AVAILABLE 
NO_DATA_AVAILABLE 
MESSAGE_TO_BIG 
FIFO_FULL 

Definition at line 39 of file rlfifo.h.

Constructor & Destructor Documentation

rlFifo::rlFifo ( int  maxmessages = 0)

Definition at line 22 of file rlfifo.cpp.

{
maxmes = maxmessages;
nmes = 0;
list = NULL;
}
rlFifo::~rlFifo ( )
virtual

Definition at line 31 of file rlfifo.cpp.

{
MessageList *ptr,*lastptr;
ptr = list;
if(ptr != NULL)
{
do
{
lastptr = ptr;
ptr = ptr->next;
delete [] lastptr->mes;
delete lastptr;
}
while(ptr != NULL);
}
}

Member Function Documentation

int rlFifo::poll ( )

Definition at line 93 of file rlfifo.cpp.

{
if(nmes > 0) return DATA_AVAILABLE;
}
int rlFifo::printf ( const char *  format,
  ... 
)

Definition at line 136 of file rlfifo.cpp.

{
int ret;
char message[rl_PRINTF_LENGTH]; // should be big enough
va_list ap;
va_start(ap,format);
ret = rlvsnprintf(message, rl_PRINTF_LENGTH - 1, format, ap);
va_end(ap);
if(ret < 0) return ret;
return write(message,strlen(message));
}
int rlFifo::read ( void *  buf,
int  maxlen 
)

Definition at line 51 of file rlfifo.cpp.

{
int retlen;
char *cbuf;
cbuf = (char *) buf;
if(list->len > maxlen)
{
}
ptr = list;
if(ptr->next == NULL)
{
retlen = ptr->len;
memcpy(buf,ptr->mes,retlen);
delete [] ptr->mes;
delete ptr;
list = NULL;
nmes--;
if(retlen < maxlen && retlen >= 0) cbuf[retlen] = '\0';
return retlen;
}
ptr = ptr->next;
retlen = list->len;
memcpy(buf,list->mes,retlen);
delete [] list->mes;
delete list;
list = ptr;
nmes--;
if(retlen < maxlen && retlen >= 0) cbuf[retlen] = '\0';
return retlen;
}
int rlFifo::write ( const void *  buf,
int  len 
)

Definition at line 99 of file rlfifo.cpp.

{
if(maxmes == 0);
else if(nmes >= maxmes) return FIFO_FULL;
if(list == NULL)
{
list->mes = new char [len];
list->len = len;
list->next = NULL;
nmes++;
memcpy(list->mes,buf,len);
return len;
}
// go to end of list
ptr = list;
while(ptr->next != NULL) ptr = ptr->next;
ptr->next = new MessageList;
ptr = ptr->next;
ptr->mes = new char [len];
ptr->len = len;
ptr->next = NULL;
nmes++;
memcpy(ptr->mes,buf,len);
return len;
}

Member Data Documentation

MessageList* rlFifo::list
private

Definition at line 51 of file rlfifo.h.

int rlFifo::maxmes
private

Definition at line 49 of file rlfifo.h.

pthread_mutex_t rlFifo::mutex
private

Definition at line 53 of file rlfifo.h.

int rlFifo::nmes
private

Definition at line 50 of file rlfifo.h.

WSEMAPHORE rlFifo::semaphore
private

Definition at line 52 of file rlfifo.h.


The documentation for this class was generated from the following files: