/** ParamUtils.hpp: * A collection of utility functions to make using parameter types easier. * In reality, this stuff belongs elsewhere, but one step at a time */ #ifndef _PARAM_UTILS_HPP #define _PARAM_UTILS_HPP #include "Param.hpp" #include #include #include "BuiltinParams.hpp" class ParamUtils { public: static bool insert(Param * param, std::map * paramTree) { assert(param); assert(paramTree); return ((paramTree->insert(std::make_pair(param->name,param))).second); } static const int AUTO_CREATE = 1; static const int NO_CREATE = 0; template static Param * find(std::string name, std::map * paramTree) { assert(paramTree); Param * param; /* First look in the suggested database */ std::map::iterator pos = paramTree->find(name); if ((FLAGS == AUTO_CREATE) && ((pos == paramTree->end()))) { /* Check if string is valid */ if (!Param::is_valid_param_string(name.c_str())) return NULL; /* Now, create the user defined parameter given the passed name */ if ((param = new Param(name)) == NULL) return NULL; /* Finally, insert the new parameter into this preset's parameter tree */ std::pair::iterator, bool> insertRetPair = paramTree->insert(std::make_pair(param->name, param)); assert(insertRetPair.second); } else if (pos != paramTree->end()) param = pos->second; else param = NULL; /* Return the found (or created) parameter. Note that this could be null */ return param; } static Param * find(const std::string & name, BuiltinParams * builtinParams, std::map * insertionTree) { Param * param; // Check first db if ((param = builtinParams->find_builtin_param(name)) != 0) return param; // Check second db, create if necessary return find(name, insertionTree); } }; #endif