rllib  1
rldataprovider.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           rldataprovider.h  -  description
00003                              -------------------
00004     begin                : Fri Dec 20 2002
00005     copyright            : (C) 2002 by Rainer Lehrig
00006     email                : lehrig@t-online.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This library is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as        *
00013  *   published by the Free Software Foundation                             *
00014  *                                                                         *
00015  ***************************************************************************/
00016 #ifndef _RL_DATA_PROVIDER_H_
00017 #define _RL_DATA_PROVIDER_H_
00018 
00019 #include "rldefine.h"
00020 #include "rlthread.h"
00021 #include "rlsocket.h"
00022 #include "rlinterpreter.h"
00023 
00029 class rlDataProvider
00030 {
00031   public:
00032     rlDataProvider(int numInteger, int numFloat=0, int numString=0);
00033     virtual ~rlDataProvider();
00034     int         getInt   (int id);
00035     float       getFloat (int id);
00036     int         getIntArray   (int id, int   *i, int nmax);
00037     int         getFloatArray (int id, float *f, int nmax);
00038     const char *getString(int id);
00039     int         setInt   (int id, int         i);
00040     int         setFloat (int id, float       f);
00041     int         setIntArray   (int id, int    *i, int num);
00042     int         setFloatArray (int id, float  *f, int num);
00043     int         setString(int id, const char *str);
00044     int         getIntAndReset(int id);
00045     int         setIntAndWaitForReset(int id, int i);
00046     int         setInt0Semaphore(int i);
00047     int         getInt0Semaphore();
00048     int         run(rlSocket *socket);
00049   private:
00050     typedef char* CHARPTR;
00051     int     *ints;
00052     float   *floats;
00053     char    **strings;
00054     int     num_integer, num_float, num_string;
00055     rlMutex mutex;
00056     rlSemaphore int0semaphore;
00057 };
00058 
00062 class rlDataProviderClient
00063 {
00064   public:
00065     rlDataProviderClient();
00066     virtual ~rlDataProviderClient();
00067     int         getInt               (rlSocket *socket, int id, int   *status);
00068     float       getFloat             (rlSocket *socket, int id, int   *status);
00069     int         getIntArray          (rlSocket *socket, int id, int   *array, int nmax);
00070     int         getFloatArray        (rlSocket *socket, int id, float *array, int nmax);
00071     const char *getString            (rlSocket *socket, int id, int   *status);
00072     int         setInt               (rlSocket *socket, int id, int         i);
00073     int         setFloat             (rlSocket *socket, int id, float       f);
00074     int         setIntArray          (rlSocket *socket, int id, int        *i, int num);
00075     int         setFloatArray        (rlSocket *socket, int id, float      *f, int num);
00076     int         setString            (rlSocket *socket, int id, const char *str);
00077     int         getIntAndReset       (rlSocket *socket, int id, int   *status);
00078     int         setIntAndWaitForReset(rlSocket *socket, int id, int         i);
00079     int         getInt0Semaphore     (rlSocket *socket,         int   *status);
00080   private:
00081     rlInterpreter interpreter;
00082     char  cret[rl_PRINTF_LENGTH];
00083 };
00084 
00089 class rlDataProviderThreads
00090 {
00091   public:
00092     rlDataProviderThreads(int Port, rlDataProvider *Provider);
00093     virtual ~rlDataProviderThreads();
00094     void start();
00095     rlDataProvider *provider;
00096     rlThread        thread;
00097     int port;
00098 };
00099 
00100 #endif