]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/propertyObject.hxx
Update doxgen config and some comments.
[simgear.git] / simgear / props / propertyObject.hxx
index a6d357f89d817ea40f07027a23f5d884b5503213..9e6586594e379473d50dd3a3dd1fc66b52ad315a 100644 (file)
@@ -59,19 +59,20 @@ template <typename T>
 class PropertyObject : PropertyObjectBase
 {
 public:
-  PropertyObject();
+  PropertyObject()
+  {}
   
   /**
    * Create from path relative to the default root, and option default value
    */
-  PropertyObject(const char* aChild) :
+  explicit PropertyObject(const char* aChild) :
     PropertyObjectBase(aChild)
   { }
   
   /**
    * Create from a node, with optional relative path
    */
-  PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
+  explicit PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
     PropertyObjectBase(aNode, aChild)
   {
   
@@ -108,20 +109,41 @@ public:
 // conversion operators
   operator T () const
   {
-    return getOrThrow()->getValue<T>();
+    return getOrThrow()->template getValue<T>();
   }
 
   T operator=(const T& aValue)
   {
     SGPropertyNode* n = PropertyObjectBase::node(true);
-    if (!n) {
+    if( !n )
       return aValue;
-    }
-    
+
     n->setValue<T>(aValue);
     return aValue;
   }
 
+#define SG_DEF_ASSIGN_OP(op)\
+  T operator op##=(const T rhs)\
+  {\
+    SGPropertyNode* n = getOrThrow();\
+    T new_val = n->getValue<T>() op rhs;\
+    n->setValue<T>(new_val);\
+    return new_val;\
+  }
+
+  SG_DEF_ASSIGN_OP(+)
+  SG_DEF_ASSIGN_OP(-)
+  SG_DEF_ASSIGN_OP(*)
+  SG_DEF_ASSIGN_OP(/)
+  SG_DEF_ASSIGN_OP(%)
+  SG_DEF_ASSIGN_OP(>>)
+  SG_DEF_ASSIGN_OP(<<)
+  SG_DEF_ASSIGN_OP(&)
+  SG_DEF_ASSIGN_OP(^)
+  SG_DEF_ASSIGN_OP(|)
+
+#undef SG_DEF_ASSIGN_OP
+
   SGPropertyNode* node() const
   {
     return PropertyObjectBase::node(false);
@@ -135,13 +157,13 @@ template <>
 class PropertyObject<std::string> : PropertyObjectBase
 {
 public:
-  PropertyObject(const char* aChild) :
+  explicit PropertyObject(const char* aChild) :
     PropertyObjectBase(aChild)
   { }
   
 
   
-  PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
+  explicit PropertyObject(SGPropertyNode* aNode, const char* aChild = NULL) :
     PropertyObjectBase(aNode, aChild)
   {