1 #ifndef MHO_OperatorToolbox_HH__
2 #define MHO_OperatorToolbox_HH__
49 void AddOperator(std::unique_ptr< MHO_Operator > op,
const std::string& name,
const std::string& category,
50 bool replace_duplicate =
true)
53 "adding an operator to the toolbox with name: " << name <<
" in category: " << category << eom);
54 auto it = fNameToOperatorMap.find(name);
55 if(it != fNameToOperatorMap.end() && replace_duplicate)
61 fNameToOperatorMap[name] = raw;
62 fCategoryToOperatorMap.emplace(category, raw);
63 fOperators.push_back(std::move(op));
75 auto it = fNameToOperatorMap.find(name);
76 if(it != fNameToOperatorMap.end())
91 std::string sname(name);
104 std::vector< MHO_Operator* > ops;
105 for(
const auto& uptr : fOperators)
107 if(uptr->GetName() == name)
109 ops.push_back(uptr.get());
112 operator_predicate op_pred;
113 std::sort(ops.begin(), ops.end(), op_pred);
123 template<
typename XOperatorType > XOperatorType*
GetOperatorAs(
const std::string& name)
125 XOperatorType* ptr =
nullptr;
129 ptr =
dynamic_cast< XOperatorType*
>(gptr);
149 std::vector< MHO_Operator* > ops;
150 for(
const auto& uptr : fOperators)
152 ops.push_back(uptr.get());
154 operator_predicate op_pred;
155 std::sort(ops.begin(), ops.end(), op_pred);
168 std::vector< MHO_Operator* > ops;
169 for(
const auto& uptr : fOperators)
171 double priority = uptr->Priority();
172 if(priority < upper_limit && lower_limit <= priority)
174 ops.push_back(uptr.get());
177 operator_predicate op_pred;
178 std::sort(ops.begin(), ops.end(), op_pred);
191 std::vector< MHO_Operator* > ops;
192 auto it1 = fCategoryToOperatorMap.lower_bound(category);
193 auto it2 = fCategoryToOperatorMap.upper_bound(category);
194 if(it1 != fCategoryToOperatorMap.end())
198 ops.push_back(it1->second);
203 operator_predicate op_pred;
204 std::sort(ops.begin(), ops.end(), op_pred);
213 for(
auto it = fNameToOperatorMap.begin(); it != fNameToOperatorMap.end(); it++)
215 std::string op_name = it->first;
219 std::string op_category =
"none";
220 for(
auto it2 = fCategoryToOperatorMap.begin(); it2 != fCategoryToOperatorMap.end(); it2++)
222 if(it->second == op_ptr)
224 op_category = it->first;
229 std::cout <<
"operator: " << op_name <<
", category: " << op_category << std::endl;
239 void RemoveOperator(
const std::string& name)
241 auto it = fNameToOperatorMap.find(name);
242 if(it != fNameToOperatorMap.end())
246 fNameToOperatorMap.erase(it);
248 for(
auto cat_iter = fCategoryToOperatorMap.begin(); cat_iter != fCategoryToOperatorMap.end(); ++cat_iter)
250 if(cat_iter->second == op_ptr)
252 fCategoryToOperatorMap.erase(cat_iter);
259 std::find_if(fOperators.begin(), fOperators.end(),
260 [op_ptr](
const std::unique_ptr< MHO_Operator >& uptr) { return uptr.get() == op_ptr; });
261 if(owned_it != fOperators.end())
263 fOperators.erase(owned_it);
274 fNameToOperatorMap.clear();
275 fCategoryToOperatorMap.clear();
279 std::vector< std::unique_ptr< MHO_Operator > > fOperators;
282 std::map< std::string, MHO_Operator* > fNameToOperatorMap;
285 std::multimap< std::string, MHO_Operator* > fCategoryToOperatorMap;
287 struct operator_predicate
289 bool operator()(
const MHO_Operator* a,
const MHO_Operator* b)
const {
return a->Priority() < b->Priority(); }
#define msg_debug(xKEY, xCONTENT)
Definition: MHO_Message.hh:291
Class MHO_Operator.
Definition: MHO_Operator.hh:21
Definition: MHO_AdhocFlagging.hh:18