|
rllib
1
|
#include <rldataprovider.h>

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 |
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.
typedef char* rlDataProvider::CHARPTR [private] |
Definition at line 50 of file rldataprovider.h.
| 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)
{
strings = new CHARPTR[num_string];
for(i=0; i<num_string; i++)
{
strings[i] = new char [1];
*strings[i] = '\0';
}
}
}
| rlDataProvider::~rlDataProvider | ( | ) | [virtual] |
| float rlDataProvider::getFloat | ( | int | id | ) |
| 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 rlDataProvider::getInt0Semaphore | ( | ) |
Definition at line 263 of file rldataprovider.cpp.
{
int0semaphore.waitSemaphore();
return getInt(0);
}
| int rlDataProvider::getIntAndReset | ( | int | id | ) |
Definition at line 223 of file rldataprovider.cpp.
| 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.
| 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);
setIntAndWaitForReset(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 | ||
| ) |
| 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.
| int rlDataProvider::setInt0Semaphore | ( | int | i | ) |
Definition at line 254 of file rldataprovider.cpp.
{
int ret;
ret = setInt(0,i);
int0semaphore.incrementSemaphore();
return ret;
}
| int rlDataProvider::setIntAndWaitForReset | ( | int | id, |
| int | i | ||
| ) |
| 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 | ||
| ) |
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.
1.7.5.1