summaryrefslogtreecommitdiff
path: root/factory.h
diff options
context:
space:
mode:
authorweidai <weidai11@users.noreply.github.com>2003-03-26 21:50:44 +0000
committerweidai <weidai11@users.noreply.github.com>2003-03-26 21:50:44 +0000
commitb4f6ef8e16db0be6ebc3e8aa01bf51ee52082aeb (patch)
treeef84fa621368e7bce53a7708b5188ae8df1d9ed3 /factory.h
parent2ccaf2ef1d78727194b59d986b491e717c508917 (diff)
downloadcryptopp-git-b4f6ef8e16db0be6ebc3e8aa01bf51ee52082aeb.tar.gz
fix bugs in SEAL and Panama
Diffstat (limited to 'factory.h')
-rw-r--r--factory.h36
1 files changed, 22 insertions, 14 deletions
diff --git a/factory.h b/factory.h
index 893a731f..1dd0bdc3 100644
--- a/factory.h
+++ b/factory.h
@@ -24,7 +24,7 @@ public:
};
-template <class AbstractClass>
+template <class AbstractClass, int instance=0>
class ObjectFactoryRegistry
{
public:
@@ -55,38 +55,46 @@ public:
}
// VC60 workaround: use "..." to prevent this function from being inlined
- static ObjectFactoryRegistry<AbstractClass> & Registry(...);
+ static ObjectFactoryRegistry<AbstractClass, instance> & Registry(...);
private:
typedef std::map<std::string, ObjectFactory<AbstractClass> *> Map;
Map m_map;
};
-template <class AbstractClass>
-ObjectFactoryRegistry<AbstractClass> & ObjectFactoryRegistry<AbstractClass>::Registry(...)
+template <class AbstractClass, int instance>
+ObjectFactoryRegistry<AbstractClass, instance> & ObjectFactoryRegistry<AbstractClass, instance>::Registry(...)
{
- static ObjectFactoryRegistry<AbstractClass> s_registry;
+ static ObjectFactoryRegistry<AbstractClass, instance> s_registry;
return s_registry;
}
-template <class AbstractClass, class ConcreteClass>
-void RegisterDefaultFactoryFor(const char *name, AbstractClass *Dummy1=NULL, ConcreteClass *Dummy2=NULL)
+template <class AbstractClass, class ConcreteClass, int instance = 0>
+struct RegisterDefaultFactoryFor {
+RegisterDefaultFactoryFor(const char *name)
{
- ObjectFactoryRegistry<AbstractClass>::Registry().RegisterFactory(name, new DefaultObjectFactory<AbstractClass, ConcreteClass>);
-}
+ ObjectFactoryRegistry<AbstractClass, instance>::Registry().RegisterFactory(name, new DefaultObjectFactory<AbstractClass, ConcreteClass>);
+}};
template <class SchemeClass>
-void RegisterPublicKeyCryptoSystemDefaultFactories(const char *name, SchemeClass *dummy=NULL)
+void RegisterAsymmetricCipherDefaultFactories(const char *name, SchemeClass *dummy=NULL)
{
- RegisterDefaultFactoryFor<PK_Encryptor, CPP_TYPENAME SchemeClass::Encryptor>(name);
- RegisterDefaultFactoryFor<PK_Decryptor, CPP_TYPENAME SchemeClass::Decryptor>(name);
+ RegisterDefaultFactoryFor<PK_Encryptor, CPP_TYPENAME SchemeClass::Encryptor>((const char *)name);
+ RegisterDefaultFactoryFor<PK_Decryptor, CPP_TYPENAME SchemeClass::Decryptor>((const char *)name);
}
template <class SchemeClass>
void RegisterSignatureSchemeDefaultFactories(const char *name, SchemeClass *dummy=NULL)
{
- RegisterDefaultFactoryFor<PK_Signer, CPP_TYPENAME SchemeClass::Signer>(name);
- RegisterDefaultFactoryFor<PK_Verifier, CPP_TYPENAME SchemeClass::Verifier>(name);
+ RegisterDefaultFactoryFor<PK_Signer, CPP_TYPENAME SchemeClass::Signer>((const char *)name);
+ RegisterDefaultFactoryFor<PK_Verifier, CPP_TYPENAME SchemeClass::Verifier>((const char *)name);
+}
+
+template <class SchemeClass>
+void RegisterSymmetricCipherDefaultFactories(const char *name, SchemeClass *dummy=NULL)
+{
+ RegisterDefaultFactoryFor<SymmetricCipher, CPP_TYPENAME SchemeClass::Encryption, ENCRYPTION>((const char *)name);
+ RegisterDefaultFactoryFor<SymmetricCipher, CPP_TYPENAME SchemeClass::Decryption, DECRYPTION>((const char *)name);
}
NAMESPACE_END