48 FactoryNotFound(
const char *name) :
Exception(
OTHER_ERROR, std::string(
"ObjectFactoryRegistry: could not find factory for algorithm ") + name) {}
53 for (
typename Map::iterator i = m_map.begin(); i != m_map.end(); ++i)
60 void RegisterFactory(
const std::string &name, ObjectFactory<AbstractClass> *factory)
62 m_map[name] = factory;
65 const ObjectFactory<AbstractClass> * GetFactory(
const char *name)
const
67 typename Map::const_iterator i = m_map.find(name);
68 return i == m_map.end() ? NULLPTR : (ObjectFactory<AbstractClass> *)i->second;
71 AbstractClass *CreateObject(
const char *name)
const
73 const ObjectFactory<AbstractClass> *factory = GetFactory(name);
76 return factory->CreateObject();
81 std::vector<std::string> GetFactoryNames()
const
83 std::vector<std::string> names;
84 typename Map::const_iterator iter;
85 for (iter = m_map.begin(); iter != m_map.end(); ++iter)
86 names.push_back(iter->first);
90 CRYPTOPP_NOINLINE
static ObjectFactoryRegistry<AbstractClass, instance> & Registry(CRYPTOPP_NOINLINE_DOTDOTDOT);
94 typedef std::map<std::string, void *> Map;