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

#include <rldataprovider.h>

Collaboration diagram for rlDataProvider:
Collaboration graph
[legend]

Public Member Functions

 rlDataProvider (int numInteger, int numFloat=0, int numString=0)
 
virtual ~rlDataProvider ()
 
int getInt (int id)
 
float getFloat (int id)
 
int getIntArray (int id, int *i, int nmax)
 
int getFloatArray (int id, float *f, int nmax)
 
const char * getString (int id)
 
int setInt (int id, int i)
 
int setFloat (int id, float f)
 
int setIntArray (int id, int *i, int num)
 
int setFloatArray (int id, float *f, int num)
 
int setString (int id, const char *str)
 
int getIntAndReset (int id)
 
int setIntAndWaitForReset (int id, int i)
 
int setInt0Semaphore (int i)
 
int getInt0Semaphore ()
 
int run (rlSocket *socket)
 

Private Types

typedef char * CHARPTR
 

Private Attributes

int * ints
 
float * floats
 
char ** strings
 
int num_integer
 
int num_float
 
int num_string
 
rlMutex mutex
 
rlSemaphore int0semaphore
 

Detailed Description

This class is a container for data.
You can get/set the data identified by id.
The run method starts a separate thread that makes rlDataProvider available over TCP.

Definition at line 29 of file rldataprovider.h.

Member Typedef Documentation

typedef char* rlDataProvider::CHARPTR
private

Definition at line 50 of file rldataprovider.h.

Constructor & Destructor Documentation

rlDataProvider::rlDataProvider ( int  numInteger,
int  numFloat = 0,
int  numString = 0 
)

Definition at line 20 of file rldataprovider.cpp.

{
int i;
num_integer = numInteger;
num_float = numFloat;
num_string = numString;
if(num_integer < 0) num_integer = 0;
if(num_float < 0) num_float = 0;
if(num_string < 0) num_string = 0;
ints = NULL;
floats = NULL;
strings = NULL;
if(num_integer > 0)
{
ints = new int[num_integer];
for(i=0; i<num_integer; i++) ints[i] = 0;
}
if(num_float > 0)
{
floats = new float[num_float];
for(i=0; i<num_float; i++) floats[i] = 0.0f;
}
if(num_string > 0)
{
for(i=0; i<num_string; i++)
{
strings[i] = new char [1];
*strings[i] = '\0';
}
}
}
rlDataProvider::~rlDataProvider ( )
virtual

Definition at line 54 of file rldataprovider.cpp.

{
int i;
if(ints != NULL) delete [] ints;
if(floats != NULL) delete [] floats;
for(i=0; i<num_string; i++)
{
if(strings[i] != NULL) delete [] strings[i];
}
if(strings != NULL) delete [] strings;
}

Member Function Documentation

float rlDataProvider::getFloat ( int  id)

Definition at line 79 of file rldataprovider.cpp.

{
float ret;
if(id < 0) return 0.0f;
if(id >= num_float) return 0.0f;
ret = floats[id];
return ret;
}
int rlDataProvider::getFloatArray ( int  id,
float *  f,
int  nmax 
)

Definition at line 116 of file rldataprovider.cpp.

{
int ret;
const char *cptr = getString(id);
if(cptr == NULL) return -1;
ret = 0;
while(1)
{
if(cptr == NULL || *cptr == '\0') break;
if(*cptr != ',' && *cptr != '\"')
{
sscanf(cptr,"%f",&array[ret++]);
cptr = strchr(cptr,',');
if(cptr != NULL) cptr++;
if(ret >= nmax) break;
}
else
{
cptr++;
}
}
return ret;
}
int rlDataProvider::getInt ( int  id)

Definition at line 67 of file rldataprovider.cpp.

{
int ret;
if(id < 0) return -1;
if(id >= num_integer) return -1;
ret = ints[id];
return ret;
}
int rlDataProvider::getInt0Semaphore ( )

Definition at line 263 of file rldataprovider.cpp.

int rlDataProvider::getIntAndReset ( int  id)

Definition at line 223 of file rldataprovider.cpp.

{
int ret;
if(id < 0) return -1;
if(id >= num_integer) return -1;
ret = ints[id];
ints[id] = -1;
return ret;
}
int rlDataProvider::getIntArray ( int  id,
int *  i,
int  nmax 
)

Definition at line 91 of file rldataprovider.cpp.

{
int ret;
const char *cptr = getString(id);
if(cptr == NULL) return -1;
ret = 0;
while(1)
{
if(cptr == NULL || *cptr == '\0') break;
if(*cptr != ',' && *cptr != '\"')
{
sscanf(cptr,"%d",&array[ret++]);
cptr = strchr(cptr,',');
if(cptr != NULL) cptr++;
if(ret >= nmax) break;
}
else
{
cptr++;
}
}
return ret;
}
const char * rlDataProvider::getString ( int  id)

Definition at line 141 of file rldataprovider.cpp.

{
const char *ret;
if(id < 0) return NULL;
if(id >= num_string) return NULL;
ret = strings[id];
return ret;
}
int rlDataProvider::run ( rlSocket socket)

Definition at line 269 of file rldataprovider.cpp.

{
int id,ival,ret;
float fval;
char cval[rl_PRINTF_LENGTH];
const char *cptr;
rlInterpreter interpreter;
while(socket->isConnected())
{
ret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1);
if(ret <= 0) break;
if (interpreter.isCommand("int("))
{
sscanf(interpreter.line,"int(%d,%d)",&id,&ival);
setInt(id,ival);
}
else if(interpreter.isCommand("intAndReset("))
{
sscanf(interpreter.line,"intAndReset(%d,%d)",&id,&ival);
}
else if(interpreter.isCommand("float("))
{
sscanf(interpreter.line,"float(%d,%f)",&id,&fval);
setFloat(id,fval);
}
else if(interpreter.isCommand("string("))
{
sscanf(interpreter.line,"string(%d,",&id);
interpreter.copyStringParam(cval,0);
setString(id,cval);
}
else if(interpreter.isCommand("getInt("))
{
sscanf(interpreter.line,"getInt(%d)",&id);
socket->printf("intResult(%d)\n",getInt(id));
}
else if(interpreter.isCommand("getIntAndReset("))
{
sscanf(interpreter.line,"getIntAndReset(%d)",&id);
socket->printf("intResult(%d)\n",getIntAndReset(id));
}
else if(interpreter.isCommand("getInt0Semaphore("))
{
socket->printf("intResult(%d)\n",getInt0Semaphore());
}
else if(interpreter.isCommand("getFloat("))
{
sscanf(interpreter.line,"getFloat(%d)",&id);
socket->printf("floatResult(%f)\n",getFloat(id));
}
else if(interpreter.isCommand("getString("))
{
sscanf(interpreter.line,"getString(%d)",&id);
cptr = getString(id);
if(cptr == NULL) socket->printf("stringResult(\"\")\n");
else socket->printf("stringResult(\"%s\")\n",cptr);
}
}
return 0;
}
int rlDataProvider::setFloat ( int  id,
float  f 
)

Definition at line 163 of file rldataprovider.cpp.

{
if(id < 0) return -1;
if(id >= num_float) return -1;
floats[id] = f;
return 0;
}
int rlDataProvider::setFloatArray ( int  id,
float *  f,
int  num 
)

Definition at line 192 of file rldataprovider.cpp.

{
char buf[rl_PRINTF_LENGTH],val[100];
int nmax,ipos,ind;
if(num <= 0) return -1;
nmax = rl_PRINTF_LENGTH - 1;
buf[0] = '\0';
ipos = strlen(buf);
for(ind=0; ind<num; ind++)
{
sprintf(val,"%f,",array[ind]);
if(ipos+(int)strlen(val) >= nmax) return -1;
strcat(buf,val);
ipos = strlen(buf);
}
return setString(id,buf);
}
int rlDataProvider::setInt ( int  id,
int  i 
)

Definition at line 153 of file rldataprovider.cpp.

{
if(id < 0) return -1;
if(id >= num_integer) return -1;
ints[id] = i;
return 0;
}
int rlDataProvider::setInt0Semaphore ( int  i)

Definition at line 254 of file rldataprovider.cpp.

{
int ret;
ret = setInt(0,i);
return ret;
}
int rlDataProvider::setIntAndWaitForReset ( int  id,
int  i 
)

Definition at line 236 of file rldataprovider.cpp.

{
if(id < 0) return -1;
if(id >= num_integer) return -1;
while(1)
{
if(ints[id] == -1)
{
ints[id] = i;
return 0;
}
rlsleep(10);
}
}
int rlDataProvider::setIntArray ( int  id,
int *  i,
int  num 
)

Definition at line 173 of file rldataprovider.cpp.

{
char buf[rl_PRINTF_LENGTH],val[100];
int nmax,ipos,ind;
if(num <= 0) return -1;
nmax = rl_PRINTF_LENGTH - 1;
buf[0] = '\0';
ipos = strlen(buf);
for(ind=0; ind<num; ind++)
{
sprintf(val,"%d,",array[ind]);
if(ipos+(int)strlen(val) >= nmax) return -1;
strcat(buf,val);
ipos = strlen(buf);
}
return setString(id,buf);
}
int rlDataProvider::setString ( int  id,
const char *  str 
)

Definition at line 211 of file rldataprovider.cpp.

{
if(id < 0) return -1;
if(id >= num_string) return -1;
if(strings[id] != NULL) delete [] strings[id];
strings[id] = new char[strlen(str)+1];
strcpy(strings[id],str);
return 0;
}

Member Data Documentation

float* rlDataProvider::floats
private

Definition at line 52 of file rldataprovider.h.

rlSemaphore rlDataProvider::int0semaphore
private

Definition at line 56 of file rldataprovider.h.

int* rlDataProvider::ints
private

Definition at line 51 of file rldataprovider.h.

rlMutex rlDataProvider::mutex
private

Definition at line 55 of file rldataprovider.h.

int rlDataProvider::num_float
private

Definition at line 54 of file rldataprovider.h.

int rlDataProvider::num_integer
private

Definition at line 54 of file rldataprovider.h.

int rlDataProvider::num_string
private

Definition at line 54 of file rldataprovider.h.

char** rlDataProvider::strings
private

Definition at line 53 of file rldataprovider.h.


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