1 #ifndef MHO_OperatorToolbox_HH__
2 #define MHO_OperatorToolbox_HH__
44 "adding an operator to the toolbox with name: " << name <<
" in category: " << category << eom);
45 auto it = fNameToOperatorMap.find(name);
46 if(it != fNameToOperatorMap.end() && replace_duplicate)
51 fNameToOperatorMap[name] = op;
52 fCategoryToOperatorMap.emplace(category, op);
53 fOperators.insert(op);
65 auto it = fNameToOperatorMap.find(name);
66 if(it != fNameToOperatorMap.end())
81 std::string sname(name);
91 template<
typename XOperatorType > XOperatorType*
GetOperatorAs(
const std::string& name)
93 XOperatorType* ptr =
nullptr;
97 ptr =
dynamic_cast< XOperatorType*
>(gptr);
117 std::vector< MHO_Operator* > ops;
118 for(
auto it = fOperators.begin(); it != fOperators.end(); it++)
123 operator_predicate op_pred;
124 std::sort(ops.begin(), ops.end(), op_pred);
137 std::vector< MHO_Operator* > ops;
138 for(
auto it = fOperators.begin(); it != fOperators.end(); it++)
140 double priority = (*it)->Priority();
141 if(priority < upper_limit && lower_limit <= priority)
147 operator_predicate op_pred;
148 std::sort(ops.begin(), ops.end(), op_pred);
161 std::vector< MHO_Operator* > ops;
162 auto it1 = fCategoryToOperatorMap.lower_bound(category);
163 auto it2 = fCategoryToOperatorMap.upper_bound(category);
164 if(it1 != fCategoryToOperatorMap.end())
168 ops.push_back(it1->second);
173 operator_predicate op_pred;
174 std::sort(ops.begin(), ops.end(), op_pred);
184 void RemoveOperator(
const std::string& name)
186 auto it = fNameToOperatorMap.find(name);
187 if(it != fNameToOperatorMap.end())
189 auto op_ptr = it->second;
191 auto op_iter = fOperators.find(op_ptr);
192 if(op_iter != fOperators.end())
194 fOperators.erase(op_iter);
198 for(
auto cat_iter = fCategoryToOperatorMap.begin(); cat_iter != fCategoryToOperatorMap.end(); cat_iter++)
200 if(cat_iter->second == op_ptr)
202 fCategoryToOperatorMap.erase(cat_iter);
208 fNameToOperatorMap.erase(it);
221 for(
auto it = fOperators.begin(); it != fOperators.end(); it++)
226 fNameToOperatorMap.clear();
227 fCategoryToOperatorMap.clear();
231 std::set< MHO_Operator* > fOperators;
234 std::map< std::string, MHO_Operator* > fNameToOperatorMap;
237 std::multimap< std::string, MHO_Operator* > fCategoryToOperatorMap;
243 class operator_predicate
246 operator_predicate(){};
247 virtual ~operator_predicate(){};
249 virtual bool operator()(
const MHO_Operator* a,
const MHO_Operator* b) {
return a->Priority() < b->Priority(); }
#define msg_debug(xKEY, xCONTENT)
Definition: MHO_Message.hh:297
Class MHO_Operator.
Definition: MHO_Operator.hh:21
Definition: MHO_ChannelLabeler.hh:17