StringArray PatchRegistry::getNames(){ Creators::iterator iterator = getCreators().begin(); Creators::iterator last = getCreators().end(); StringArray result; for(; iterator != last; ++iterator){ result.add((const char*)(iterator->first).c_str()); } return result; }
static void add(std::string const& name) { static_assert(!std::is_abstract<TEngine>::value, "The engine object must not be abstract."); static_assert(std::is_constructible<TEngine, model::Object const&, Patcher&, std::vector<Atom> const&>::value, "The engine object must have a valid constructor."); assert(!name.empty()); assert(modelHasObject(name) && "The model counterpart does not exist"); auto& creators = getCreators(); assert(creators.count(name) == 0 && "The object already exists"); creators[name] = [](model::Object const& model, Patcher& patcher, std::vector<Atom> const& args) -> TEngine* { return new TEngine(model, patcher, args); }; }
void PatchRegistry::registerPatch(const std::string& name, PatchCreator creator){ getCreators()[name] = creator; }
Patch* PatchRegistry::create(const std::string& name) { // creates an object from a string const Creators::const_iterator iter = getCreators().find(name); return iter == getCreators().end() ? NULL : (*iter->second)(); // if found, execute the creator function pointer }