Go to the documentation of this file.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
00040 #ifndef __PLUGIN_SYMBOLIC_LOG_H__
00041 #define __PLUGIN_SYMBOLIC_LOG_H__
00042
00043
00044 #define PLUGIN_CLASS PluginSymbolicLog
00045
00046
00047
00048 #include <cstdlib>
00049 #include <iostream>
00050
00051
00052 #include <ros/ros.h>
00053
00054
00055 #include <designators/CDesignator.h>
00056 #include <designator_integration_msgs/DesignatorCommunication.h>
00057
00058
00059 #include <Types.h>
00060 #include <ForwardDeclarations.h>
00061 #include <Plugin.h>
00062 #include <Node.h>
00063
00064
00065 namespace beliefstate {
00066 namespace plugins {
00067 class PLUGIN_CLASS : public Plugin {
00068 private:
00069 std::list<Node*> m_lstNodes;
00070 std::list<Node*> m_lstRootNodes;
00071 Node* m_ndActive;
00072 std::list<Node*> m_lstNodeStack;
00073 std::list< std::pair<std::string, std::string> > m_lstDesignatorIDs;
00074 std::list< std::pair<std::string, std::string> > m_lstDesignatorEquations;
00075 std::list< std::pair<std::string, std::string> > m_lstDesignatorEquationTimes;
00076 std::pair<std::string, Node*> m_prLastFailure;
00077 std::map<std::string, Node*> m_mapFailureCatchers;
00078 std::map<int, Node*> m_mapNodeIDs;
00079
00080 public:
00081 PLUGIN_CLASS();
00082 ~PLUGIN_CLASS();
00083
00084 virtual Result init(int argc, char** argv);
00085 virtual Result deinit();
00086
00087 virtual Result cycle();
00088
00089 virtual void consumeEvent(Event evEvent);
00090 virtual Event consumeServiceEvent(ServiceEvent seServiceEvent);
00091
00092 Node* addNode(std::string strName, int nContextID, Node* ndParent = NULL);
00093 void setNodeAsActive(Node* ndActive);
00094 Node* activeNode();
00095
00096 std::string getDesignatorID(std::string strMemoryAddress);
00097 std::string getDesignatorIDType(CDesignator* desigCurrent);
00098 std::string getUniqueDesignatorID(std::string strMemoryAddress, CDesignator* desigCurrent);
00099 std::string generateRandomIdentifier(std::string strPrefix, unsigned int unLength);
00100 std::string equateDesignators(std::string strMAChild, CDesignator* desigChild, std::string strMAParent, CDesignator* desigParent);
00101
00102 bool ensureDesignatorPublished(std::list<CKeyValuePair*> lstDescription, std::string strMemoryAddress, std::string strType, std::string strAnnotation = "", bool bAdd = false, Node* ndRelative = NULL);
00103 void setNestedDesignatorUniqueIDs(CKeyValuePair* ckvpParent);
00104
00105 CDesignator* makeDesignator(enum DesignatorType edtType, list<CKeyValuePair*> lstDescription);
00106 CDesignator* makeDesignator(std::string strType, list<CKeyValuePair*> lstDescription);
00107
00108 Node* nodeByID(int nID);
00109 Node* relativeActiveNode(Event evEvent);
00110 };
00111 }
00112
00113 extern "C" plugins::PLUGIN_CLASS* createInstance();
00114 extern "C" void destroyInstance(plugins::PLUGIN_CLASS* icDestroy);
00115 }
00116
00117
00118 #endif