00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00023 #ifndef _CLASS_PROPERTIES_H
00024 #define _CLASS_PROPERTIES_H
00025
00026 #ifdef __cplusplus
00027
00028 #include "beecrypt/c++/mutex.h"
00029 using beecrypt::mutex;
00030 #include "beecrypt/c++/io/InputStream.h"
00031 using beecrypt::io::InputStream;
00032 #include "beecrypt/c++/io/OutputStream.h"
00033 using beecrypt::io::OutputStream;
00034 #include "beecrypt/c++/lang/Object.h"
00035 using beecrypt::lang::Object;
00036 #include "beecrypt/c++/lang/String.h"
00037 using beecrypt::lang::String;
00038 #include "beecrypt/c++/util/Enumeration.h"
00039 using beecrypt::util::Enumeration;
00040
00041 #include <map>
00042 using std::map;
00043
00044 namespace beecrypt {
00045 namespace util {
00048 class BEECRYPTCXXAPI Properties : public beecrypt::lang::Object
00049 {
00050 private:
00051 typedef map<String,String> properties_map;
00052
00053 class PropEnum : public Enumeration
00054 {
00055 public:
00056 properties_map::const_iterator _it;
00057 properties_map::const_iterator _end;
00058
00059 public:
00060 PropEnum(const properties_map& map) throw ();
00061 virtual ~PropEnum() throw ();
00062
00063 virtual bool hasMoreElements() throw ();
00064 virtual const void* nextElement() throw (NoSuchElementException);
00065 };
00066
00067 properties_map _pmap;
00068 mutex _lock;
00069
00070 protected:
00071 const Properties* defaults;
00072
00073 public:
00074 Properties();
00075 Properties(const Properties& copy);
00076 Properties(const Properties* defaults);
00077 virtual ~Properties();
00078
00079 const String* getProperty(const String& key) const throw ();
00080 const String* getProperty(const String& key, const String& defaultValue) const throw ();
00081
00082 void setProperty(const String& key, const String& value) throw ();
00083
00084 Enumeration* propertyNames() const;
00085
00086 void load(InputStream& in) throw (IOException);
00087 void store(OutputStream& out, const String& header) throw (IOException);
00088 };
00089 }
00090 }
00091
00092 #endif
00093
00094 #endif