00001 /* 00002 * TrajectoryModuleContainer.hpp 00003 * 00004 * Created on: Dec 13, 2011 00005 * Author: mriedel 00006 */ 00007 00008 #ifndef TRAJECTORYMODULECONTAINER_HPP_ 00009 #define TRAJECTORYMODULECONTAINER_HPP_ 00010 00011 #include <telekyb_defines/telekyb_defines.hpp> 00012 00013 #include <tk_trajprocessor/TrajectoryModule.hpp> 00014 #include <pluginlib/class_loader.h> 00015 00016 // stl 00017 #include <set> 00018 #include <list> 00019 00020 00021 namespace TELEKYB_NAMESPACE { 00022 00023 class TrajectoryModuleContainer { 00024 protected: 00025 pluginlib::ClassLoader<TrajectoryModule> trajectoryModuleLoader; 00026 // Behaviorset. Contains all loaded Behaviors from all Containers! 00027 std::set<TrajectoryModule*> trajectoryModuleInstances; 00028 00030 std::list<TrajectoryModule*> positionPriorityList; 00032 std::list<TrajectoryModule*> velocityPriorityList; 00034 std::list<TrajectoryModule*> accelerationPriorityList; 00035 //** only contains TrajModulePosType::All **// 00036 std::list<TrajectoryModule*> otherPriorityList; 00037 00038 // add and remove from priority lists 00039 void insertPriorityLists(TrajectoryModule* tm); 00040 void removePriorityLists(TrajectoryModule* tm); 00041 00042 // general insert function 00043 static void insertPriorityElementIntoList(TrajectoryModule* tm, std::list<TrajectoryModule*>& list); 00044 00045 public: 00046 TrajectoryModuleContainer(); 00047 virtual ~TrajectoryModuleContainer(); 00048 00049 // should be const, but getDeclaredClasses is declared wrongly. 00050 void getAvailableTrajectoryModules(std::vector<std::string>& trajectoryModuleClassNames); 00051 00052 // returns 0 if fails 00053 TrajectoryModule* loadTrajectoryModule(const std::string& trajectoryModuleClassName); 00054 void unLoadTrajectoryModule(TrajectoryModule* tm); 00055 00056 // Reset all Modules to intital State. 00057 void activateAllTrajectoryModules(); 00058 void deactivateAllTrajectoryModules(); 00059 00060 // steps 00061 void trajectoryStepPosition(const TKState& currentState, TKTrajectory& trajInput); 00062 void trajectoryStepVelocity(const TKState& currentState, TKTrajectory& trajInput); 00063 void trajectoryStepAcceleration(const TKState& currentState, TKTrajectory& trajInput); 00064 void trajectoryStepOther(const TKState& currentState, TKTrajectory& trajInput); 00065 00066 }; 00067 00068 } /* namespace telekyb */ 00069 #endif /* TRAJECTORYMODULECONTAINER_HPP_ */