00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00023 #ifndef _CLASS_PROVIDER_H
00024 #define _CLASS_PROVIDER_H
00025
00026 #ifdef __cplusplus
00027
00028 #include "beecrypt/c++/mutex.h"
00029 using beecrypt::mutex;
00030 #include "beecrypt/c++/lang/String.h"
00031 using beecrypt::lang::String;
00032 #include "beecrypt/c++/util/Properties.h"
00033 using beecrypt::util::Properties;
00034
00035 #include <unicode/ucnv.h>
00036 #include <map>
00037 using std::map;
00038
00039 namespace beecrypt {
00040 namespace security {
00043 class BEECRYPTCXXAPI Provider : public beecrypt::util::Properties
00044 {
00045 friend class Security;
00046
00047 private:
00048 String _name;
00049 String _info;
00050 double _vers;
00051
00052 mutex _lock;
00053 UConverter* _conv;
00054
00055 typedef Object* (*instantiator)();
00056 typedef map<String,instantiator> instantiator_map;
00057
00058 instantiator_map _imap;
00059
00060 instantiator getInstantiator(const String& name) const;
00061
00062 protected:
00063 #if WIN32
00064 HANDLE _dlhandle;
00065 #else
00066 void* _dlhandle;
00067 #endif
00068
00069 Provider(const String& name, double version, const String& info);
00070
00071 public:
00072 virtual ~Provider();
00073
00074 void put(const String& key, const String& value);
00075
00076 const String& getName() const throw ();
00077 const String& getInfo() const throw ();
00078 double getVersion() const throw ();
00079 };
00080 }
00081 }
00082
00083 #endif
00084
00085 #endif