ProgramProcessor.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef PROGRAM_PROCESSOR_HPP
00039 #define PROGRAM_PROCESSOR_HPP
00040
00041 #include "RunnableInterface.hpp"
00042 #include "BufferPolicy.hpp"
00043 #include "List.hpp"
00044 #include "ProgramExceptions.hpp"
00045 #include "ProgramInterface.hpp"
00046
00047 #include <map>
00048 #include <string>
00049 #include <vector>
00050 #include "os/Mutex.hpp"
00051
00052 namespace RTT
00053 {
00054 template< class T, class RP, class WP>
00055 class Queue;
00056 }
00057
00058 namespace RTT
00059 {
00077 class RTT_API ProgramProcessor
00078 : public RunnableInterface
00079 {
00080 public:
00085 ProgramProcessor(int f_queue_size = ORONUM_EXECUTION_PROC_QUEUE_SIZE);
00086
00087 virtual ~ProgramProcessor();
00088
00089 typedef ProgramInterface::Status Status;
00090
00096 bool loadProgram( ProgramInterfacePtr pi );
00097
00104 bool deleteProgram(const std::string& name);
00105
00111 bool unloadProgram(const std::string& name);
00112
00116 void clear();
00117
00121 Status::ProgramStatus getProgramStatus(const std::string& name) const;
00122
00126 std::string getProgramStatusStr(const std::string& name) const;
00127
00128 virtual bool initialize();
00129 virtual void step();
00130 virtual void finalize();
00131
00142 virtual bool runFunction(ProgramInterface* f);
00143
00151 virtual bool removeFunction(ProgramInterface* f);
00152
00156 std::vector<std::string> getProgramList() const;
00157
00161 const ProgramInterfacePtr getProgram(const std::string& name) const;
00162
00163 ProgramInterfacePtr getProgram(const std::string& name);
00164
00165 protected:
00166 typedef List<ProgramInterfacePtr> ProgMap;
00167 ProgMap* programs;
00168
00169 std::vector<ProgramInterface*> funcs;
00170
00171 Queue<ProgramInterface*,NonBlockingPolicy,NonBlockingPolicy>* f_queue;
00172
00173 OS::Mutex syncer;
00174 };
00175
00176 }
00177
00178 #endif