1 #ifndef CRYPTOPP_OBJFACT_H
2 #define CRYPTOPP_OBJFACT_H
8 NAMESPACE_BEGIN(CryptoPP)
11 template <class AbstractClass>
15 virtual AbstractClass * CreateObject()
const =0;
19 template <
class AbstractClass,
class ConcreteClass>
23 AbstractClass * CreateObject()
const
25 return new ConcreteClass;
31 template <
class AbstractClass,
int instance=0>
43 for (CPP_TYPENAME Map::iterator i = m_map.begin(); i != m_map.end(); ++i)
52 m_map[name] = factory;
57 CPP_TYPENAME Map::const_iterator i = m_map.find(name);
61 AbstractClass *CreateObject(
const char *name)
const
65 throw FactoryNotFound(name);
66 return factory->CreateObject();
71 std::vector<std::string> GetFactoryNames()
const
73 std::vector<std::string> names;
74 CPP_TYPENAME Map::const_iterator iter;
75 for (iter = m_map.begin(); iter != m_map.end(); ++iter)
76 names.push_back(iter->first);
84 typedef std::map<std::string, void *> Map;
88 template <
class AbstractClass,
int instance>
95 template <
class AbstractClass,
class ConcreteClass,
int instance = 0>
100 std::string n = name ? std::string(name) : std::string(ConcreteClass::StaticAlgorithmName());
105 template <
class SchemeClass>
106 void RegisterAsymmetricCipherDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
112 template <
class SchemeClass>
113 void RegisterSignatureSchemeDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
119 template <
class SchemeClass>
120 void RegisterSymmetricCipherDefaultFactories(
const char *name=NULL, SchemeClass *dummy=NULL)
126 template <
class SchemeClass>
127 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