#ifndef _HR_PLAN_ #define _HR_PLAN_ #include #include #include #include "types.hpp" //#include "../action_engine/ActionEngine.hpp" #include "base_rule.hpp" #include "rule_queue.hpp" #include "base_rule_order.hpp" #include "i_engine_descriptor.hpp" //class BaseRule; class SimplePlan { public: /* * Ctor */ SimplePlan( ptrReactivePlanner, IEngineDescriptor* engine); /* * Dtor */ ~SimplePlan(); //priority, weight, action, flags, sticky_timeout, fails, successes ptrBaseRule AddActionRule(std::string &, unsigned int, unsigned int, std::vector< int> &, unsigned int, unsigned int, unsigned int, unsigned int); //priority, weight, plan, flags, sticky_timeout, fails, successes ptrBaseRule AddPlanRule(unsigned int, unsigned int, ptrSimplePlan, unsigned int, unsigned int, unsigned int, unsigned int); //priority, weight, flags, sticky_timeout, fails, successes ptrBaseRule AddFailRule(std::string &, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); //priority, weight, flags, sticky_timeout, fails, successes ptrBaseRule AddSuccessRule(std::string &, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); //ASM method int GetAction(); friend void BaseRule::Activate(); friend void BaseRule::Deactivate(); protected: typedef std::list ruleList; typedef RuleQueue RuleQueueType; ptrReactivePlanner _planner; ruleList _rule_list; RuleQueueType _active_rules; //rule scheduling & flag hnadling methods void _activate_rule( ptrBaseRule); void _deactivate_rule( ptrBaseRule); //_active_rules queue handling void _activate( ptrBaseRule); void _deactivate( ptrBaseRule); // releaser safe scheduling ptrBaseRule _rsrule_deactiv_sched; IEngineDescriptor* _engine; }; #endif