1 #ifndef CRYPTOPP_OBJFACT_H
2 #define CRYPTOPP_OBJFACT_H
8 NAMESPACE_BEGIN(CryptoPP)
11 template <class AbstractClass>
15 virtual ~ObjectFactory () {}
16 virtual AbstractClass * CreateObject()
const =0;
20 template <
class AbstractClass,
class ConcreteClass>
24 AbstractClass * CreateObject()
const
26 return new ConcreteClass;
32 template <
class AbstractClass,
int instance=0>
44 for (CPP_TYPENAME Map::iterator i = m_map.begin(); i != m_map.end(); ++i)
53 m_map[name] = factory;
58 CPP_TYPENAME Map::const_iterator i = m_map.find(name);
62 AbstractClass *CreateObject(
const char *name)
const
66 throw FactoryNotFound(name);
67 return factory->CreateObject();
72 std::vector<std::string> GetFactoryNames()
const
74 std::vector<std::string> names;
75 CPP_TYPENAME Map::const_iterator iter;
76 for (iter = m_map.begin(); iter != m_map.end(); ++iter)
77 names.push_back(iter->first);
85 typedef std::map<std::string, void *> Map;
89 template <
class AbstractClass,
int instance>
96 template <
class AbstractClass,
class ConcreteClass,
int instance = 0>
101 std::string n = name ? std::string(name) : std::string(ConcreteClass::StaticAlgorithmName());
106 template <
class SchemeClass>
107 void RegisterAsymmetricCipherDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
113 template <
class SchemeClass>
114 void RegisterSignatureSchemeDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
120 template <
class SchemeClass>
121 void RegisterSymmetricCipherDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
127 template <
class SchemeClass>
128 void RegisterAuthenticatedSymmetricCipherDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
base class for all exceptions thrown by Crypto++
some error not belong to any of the above categories