+++ /dev/null
-#ifndef __PROPERTY__
-#define __PROPERTY__
-
-#include "tree.hh"
-
-template<class P> class property
-{
- Tree fKey;
-
- P* access(Tree t)
- {
- Tree d = t->getProperty(fKey);
- return d ? (P*)(d->node().getPointer()) : 0;
- }
-
-public:
-
- property () : fKey(tree(Node(unique("property_")))) {}
-
- property (const char* keyname) : fKey(tree(Node(keyname))) {}
-
- void set(Tree t, const P& data)
- {
- P* p = access(t);
- if (p) {
- *p = data;
- } else {
- t->setProperty(fKey, tree(Node(new P(data))));
- }
- }
-
- bool get(Tree t, P& data)
- {
- P* p = access(t);
- if (p) {
- data = *p;
- return true;
- } else {
- return false;
- }
- }
-
- void clear(Tree t)
- {
- P* p = access(t);
- if (p) { delete p; }
- t->clearProperty(fKey);
- }
-};
-
-
-template<> class property<Tree>
-{
- Tree fKey;
-
-public:
-
- property () : fKey(tree(Node(unique("property_")))) {}
-
- property (const char* keyname) : fKey(tree(Node(keyname))) {}
-
- void set(Tree t, Tree data)
- {
- t->setProperty(fKey, data);
- }
-
- bool get(Tree t, Tree& data)
- {
- Tree d = t->getProperty(fKey);
- if (d) {
- data = d;
- return true;
- } else {
- return false;
- }
- }
-
- void clear(Tree t)
- {
- t->clearProperty(fKey);
- }
-};
-
-
-template<> class property<int>
-{
- Tree fKey;
-
-public:
-
- property () : fKey(tree(Node(unique("property_")))) {}
-
- property (const char* keyname) : fKey(tree(Node(keyname))) {}
-
- void set(Tree t, int i)
- {
- t->setProperty(fKey, tree(Node(i)));
- }
-
- bool get(Tree t, int& i)
- {
- Tree d = t->getProperty(fKey);
- if (d) {
- i = d->node().getInt();
- return true;
- } else {
- return false;
- }
- }
-
- void clear(Tree t)
- {
- t->clearProperty(fKey);
- }
-};
-
-
-template<> class property<double>
-{
- Tree fKey;
-
-public:
-
- property () : fKey(tree(Node(unique("property_")))) {}
-
- property (const char* keyname) : fKey(tree(Node(keyname))) {}
-
- void set(Tree t, double x)
- {
- t->setProperty(fKey, tree(Node(x)));
- }
-
- bool get(Tree t, double& x)
- {
- Tree d = t->getProperty(fKey);
- if (d) {
- x = d->node().getDouble();
- return true;
- } else {
- return false;
- }
- }
-
- void clear(Tree t)
- {
- t->clearProperty(fKey);
- }
-};
-
-
-
-#endif