diff options
Diffstat (limited to 'packages/noncvs/windows/extra/Gem/dev/Gem/Properties.h')
-rw-r--r-- | packages/noncvs/windows/extra/Gem/dev/Gem/Properties.h | 216 |
1 files changed, 108 insertions, 108 deletions
diff --git a/packages/noncvs/windows/extra/Gem/dev/Gem/Properties.h b/packages/noncvs/windows/extra/Gem/dev/Gem/Properties.h index a5db22dd..f4fdcb3d 100644 --- a/packages/noncvs/windows/extra/Gem/dev/Gem/Properties.h +++ b/packages/noncvs/windows/extra/Gem/dev/Gem/Properties.h @@ -1,108 +1,108 @@ -/* - * Copyright (c) 2010-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at - * - * map that stores "any"thing - * - * USAGE: - * - * Properties am; // create a new Properties - * am["a"] = 42; // assign value "42" to key "a" - * int i=0; - * try { i=any_cast<int>am["a"]; } catch(bad_any_cast ex) { ; } // retrieve value from key "a"; might throw a bad_any_cast exception - * am.get("a", i); // retrieve value at key "a"; if there was an error (e.g. typeof(i) does not match, then i is left untouched and "false" is returned - * - * NOTE: - * this simplilstic approach has some problems with type-conversion - * e.g. this will fail: - * am["a"]=12.0f; any_cast<int>am["a"]; - */ - -#ifndef GEM_PROPERTIES_H -#define GEM_PROPERTIES_H - -#include "Utils/any.h" -#include <vector> -#include <string> - -namespace gem -{ - class Properties { - private: - class PIMPL; - PIMPL*pimpl; - - public: - enum PropertyType { - UNSET=-1, /* not set, in-existant */ - NONE, /* "bang" */ - DOUBLE, /* double */ - STRING, /* std::string */ - UNKNOWN /* all the rest */ - }; - - Properties(void); - Properties(const gem::Properties&); /* copy constructor */ - - virtual ~Properties(void); - -#if 0 - /* array/hashmap like access: - * e.g.: prop["width"]=640; - */ - virtual gem::any&operator[](const std::string&key); -#endif - - /* get the value of a property - * e.g.: double w=any_cast<double>prop.at("width") - */ - virtual gem::any get(const std::string&key) const; - - /* check whether the given key exists - * if the key was in the property-map, return the type of the property - * if no key of the given value exists, return <code>PropertyType::UNSET</code> - */ - virtual enum PropertyType type(const std::string) const; - - /* set a property - * e.g.: double w=640; prop.set("width", w); - */ - virtual void set(const std::string&key, gem::any value); - - /* get a property - * e.g.: double w=320; prop.get("width", w); - * NOTE: if no property of the given name exists or the existing property - * is of a different (incompatible) type, "value" will not be changed - */ - template<class Class> - bool get(const std::string&key, Class&value) const { - try { - value=gem::any_cast<Class>(get(key)); - } catch (gem::bad_any_cast e) { - return false; - } - return true; - }; - - /* get all keys - */ - virtual std::vector<std::string>keys(void) const; - - /* - * delete a given key from the Properties - */ - virtual void erase(const std::string); - /* - * delete all keys from the Properties - */ - virtual void clear(void); - - - /* - * assign Properties from another set - */ - virtual gem::Properties& assign(const gem::Properties&); - gem::Properties& operator= (const gem::Properties&org) { return assign(org); } - - }; -}; -#endif /* GEM_PROPERTIES_H */ +/*
+ * Copyright (c) 2010-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
+ *
+ * map that stores "any"thing
+ *
+ * USAGE:
+ *
+ * Properties am; // create a new Properties
+ * am["a"] = 42; // assign value "42" to key "a"
+ * int i=0;
+ * try { i=any_cast<int>am["a"]; } catch(bad_any_cast ex) { ; } // retrieve value from key "a"; might throw a bad_any_cast exception
+ * am.get("a", i); // retrieve value at key "a"; if there was an error (e.g. typeof(i) does not match, then i is left untouched and "false" is returned
+ *
+ * NOTE:
+ * this simplilstic approach has some problems with type-conversion
+ * e.g. this will fail:
+ * am["a"]=12.0f; any_cast<int>am["a"];
+ */
+
+#ifndef GEM_PROPERTIES_H
+#define GEM_PROPERTIES_H
+
+#include "Utils/any.h"
+#include <vector>
+#include <string>
+
+namespace gem
+{
+ class Properties {
+ private:
+ class PIMPL;
+ PIMPL*pimpl;
+
+ public:
+ enum PropertyType {
+ UNSET=-1, /* not set, in-existant */
+ NONE, /* "bang" */
+ DOUBLE, /* double */
+ STRING, /* std::string */
+ UNKNOWN /* all the rest */
+ };
+
+ Properties(void);
+ Properties(const gem::Properties&); /* copy constructor */
+
+ virtual ~Properties(void);
+
+#if 0
+ /* array/hashmap like access:
+ * e.g.: prop["width"]=640;
+ */
+ virtual gem::any&operator[](const std::string&key);
+#endif
+
+ /* get the value of a property
+ * e.g.: double w=any_cast<double>prop.at("width")
+ */
+ virtual gem::any get(const std::string&key) const;
+
+ /* check whether the given key exists
+ * if the key was in the property-map, return the type of the property
+ * if no key of the given value exists, return <code>PropertyType::UNSET</code>
+ */
+ virtual enum PropertyType type(const std::string) const;
+
+ /* set a property
+ * e.g.: double w=640; prop.set("width", w);
+ */
+ virtual void set(const std::string&key, gem::any value);
+
+ /* get a property
+ * e.g.: double w=320; prop.get("width", w);
+ * NOTE: if no property of the given name exists or the existing property
+ * is of a different (incompatible) type, "value" will not be changed
+ */
+ template<class Class>
+ bool get(const std::string&key, Class&value) const {
+ try {
+ value=gem::any_cast<Class>(get(key));
+ } catch (gem::bad_any_cast e) {
+ return false;
+ }
+ return true;
+ };
+
+ /* get all keys
+ */
+ virtual std::vector<std::string>keys(void) const;
+
+ /*
+ * delete a given key from the Properties
+ */
+ virtual void erase(const std::string);
+ /*
+ * delete all keys from the Properties
+ */
+ virtual void clear(void);
+
+
+ /*
+ * assign Properties from another set
+ */
+ virtual gem::Properties& assign(const gem::Properties&);
+ gem::Properties& operator= (const gem::Properties&org) { return assign(org); }
+
+ };
+};
+#endif /* GEM_PROPERTIES_H */
|