#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.
00021 { 00022 int i; 00023 00024 num_integer = numInteger; 00025 num_float = numFloat; 00026 num_string = numString; 00027 if(num_integer < 0) num_integer = 0; 00028 if(num_float < 0) num_float = 0; 00029 if(num_string < 0) num_string = 0; 00030 ints = NULL; 00031 floats = NULL; 00032 strings = NULL; 00033 if(num_integer > 0) 00034 { 00035 ints = new int[num_integer]; 00036 for(i=0; i<num_integer; i++) ints[i] = 0; 00037 } 00038 if(num_float > 0) 00039 { 00040 floats = new float[num_float]; 00041 for(i=0; i<num_float; i++) floats[i] = 0.0f; 00042 } 00043 if(num_string > 0) 00044 { 00045 strings = new CHARPTR[num_string]; 00046 for(i=0; i<num_string; i++) 00047 { 00048 strings[i] = new char [1]; 00049 *strings[i] = '\0'; 00050 } 00051 } 00052 }
| rlDataProvider::~rlDataProvider | ( | ) | [virtual] |
Definition at line 54 of file rldataprovider.cpp.
| float rlDataProvider::getFloat | ( | int | id | ) |
| int rlDataProvider::getFloatArray | ( | int | id, | |
| float * | f, | |||
| int | nmax | |||
| ) |
Definition at line 116 of file rldataprovider.cpp.
00117 { 00118 int ret; 00119 const char *cptr = getString(id); 00120 if(cptr == NULL) return -1; 00121 00122 ret = 0; 00123 while(1) 00124 { 00125 if(cptr == NULL || *cptr == '\0') break; 00126 if(*cptr != ',' && *cptr != '\"') 00127 { 00128 sscanf(cptr,"%f",&array[ret++]); 00129 cptr = strchr(cptr,','); 00130 if(cptr != NULL) cptr++; 00131 if(ret >= nmax) break; 00132 } 00133 else 00134 { 00135 cptr++; 00136 } 00137 } 00138 return ret; 00139 }
| int rlDataProvider::getInt | ( | int | id | ) |
Definition at line 67 of file rldataprovider.cpp.
| int rlDataProvider::getInt0Semaphore | ( | ) |
Definition at line 263 of file rldataprovider.cpp.
00264 { 00265 int0semaphore.waitSemaphore(); 00266 return getInt(0); 00267 }
| 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.
00092 { 00093 int ret; 00094 const char *cptr = getString(id); 00095 if(cptr == NULL) return -1; 00096 00097 ret = 0; 00098 while(1) 00099 { 00100 if(cptr == NULL || *cptr == '\0') break; 00101 if(*cptr != ',' && *cptr != '\"') 00102 { 00103 sscanf(cptr,"%d",&array[ret++]); 00104 cptr = strchr(cptr,','); 00105 if(cptr != NULL) cptr++; 00106 if(ret >= nmax) break; 00107 } 00108 else 00109 { 00110 cptr++; 00111 } 00112 } 00113 return ret; 00114 }
| 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.
00270 { 00271 int id,ival,ret; 00272 float fval; 00273 char cval[rl_PRINTF_LENGTH]; 00274 const char *cptr; 00275 rlInterpreter interpreter; 00276 00277 while(socket->isConnected()) 00278 { 00279 ret = socket->readStr(interpreter.line,rl_PRINTF_LENGTH-1); 00280 if(ret <= 0) break; 00281 if (interpreter.isCommand("int(")) 00282 { 00283 sscanf(interpreter.line,"int(%d,%d)",&id,&ival); 00284 setInt(id,ival); 00285 } 00286 else if(interpreter.isCommand("intAndReset(")) 00287 { 00288 sscanf(interpreter.line,"intAndReset(%d,%d)",&id,&ival); 00289 setIntAndWaitForReset(id,ival); 00290 } 00291 else if(interpreter.isCommand("float(")) 00292 { 00293 sscanf(interpreter.line,"float(%d,%f)",&id,&fval); 00294 setFloat(id,fval); 00295 } 00296 else if(interpreter.isCommand("string(")) 00297 { 00298 sscanf(interpreter.line,"string(%d,",&id); 00299 interpreter.copyStringParam(cval,0); 00300 setString(id,cval); 00301 } 00302 else if(interpreter.isCommand("getInt(")) 00303 { 00304 sscanf(interpreter.line,"getInt(%d)",&id); 00305 socket->printf("intResult(%d)\n",getInt(id)); 00306 } 00307 else if(interpreter.isCommand("getIntAndReset(")) 00308 { 00309 sscanf(interpreter.line,"getIntAndReset(%d)",&id); 00310 socket->printf("intResult(%d)\n",getIntAndReset(id)); 00311 } 00312 else if(interpreter.isCommand("getInt0Semaphore(")) 00313 { 00314 socket->printf("intResult(%d)\n",getInt0Semaphore()); 00315 } 00316 else if(interpreter.isCommand("getFloat(")) 00317 { 00318 sscanf(interpreter.line,"getFloat(%d)",&id); 00319 socket->printf("floatResult(%f)\n",getFloat(id)); 00320 } 00321 else if(interpreter.isCommand("getString(")) 00322 { 00323 sscanf(interpreter.line,"getString(%d)",&id); 00324 cptr = getString(id); 00325 if(cptr == NULL) socket->printf("stringResult(\"\")\n"); 00326 else socket->printf("stringResult(\"%s\")\n",cptr); 00327 } 00328 } 00329 return 0; 00330 }
| int rlDataProvider::setFloat | ( | int | id, | |
| float | f | |||
| ) |
| int rlDataProvider::setFloatArray | ( | int | id, | |
| float * | f, | |||
| int | num | |||
| ) |
Definition at line 192 of file rldataprovider.cpp.
00193 { 00194 char buf[rl_PRINTF_LENGTH],val[100]; 00195 int nmax,ipos,ind; 00196 00197 if(num <= 0) return -1; 00198 nmax = rl_PRINTF_LENGTH - 1; 00199 buf[0] = '\0'; 00200 ipos = strlen(buf); 00201 for(ind=0; ind<num; ind++) 00202 { 00203 sprintf(val,"%f,",array[ind]); 00204 if(ipos+(int)strlen(val) >= nmax) return -1; 00205 strcat(buf,val); 00206 ipos = strlen(buf); 00207 } 00208 return setString(id,buf); 00209 }
| 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.
00255 { 00256 int ret; 00257 00258 ret = setInt(0,i); 00259 int0semaphore.incrementSemaphore(); 00260 return ret; 00261 }
| int rlDataProvider::setIntAndWaitForReset | ( | int | id, | |
| int | i | |||
| ) |
Definition at line 236 of file rldataprovider.cpp.
| int rlDataProvider::setIntArray | ( | int | id, | |
| int * | i, | |||
| int | num | |||
| ) |
Definition at line 173 of file rldataprovider.cpp.
00174 { 00175 char buf[rl_PRINTF_LENGTH],val[100]; 00176 int nmax,ipos,ind; 00177 00178 if(num <= 0) return -1; 00179 nmax = rl_PRINTF_LENGTH - 1; 00180 buf[0] = '\0'; 00181 ipos = strlen(buf); 00182 for(ind=0; ind<num; ind++) 00183 { 00184 sprintf(val,"%d,",array[ind]); 00185 if(ipos+(int)strlen(val) >= nmax) return -1; 00186 strcat(buf,val); 00187 ipos = strlen(buf); 00188 } 00189 return setString(id,buf); 00190 }
| int rlDataProvider::setString | ( | int | id, | |
| const char * | str | |||
| ) |
Definition at line 211 of file rldataprovider.cpp.
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.6.3