]> git.mxchange.org Git - simgear.git/commitdiff
Overload Rect::contains and add compound assignment operators to PropertyObject
authorThomas Geymayer <tomgey@gmail.com>
Wed, 12 Dec 2012 23:30:01 +0000 (00:30 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Wed, 12 Dec 2012 23:30:11 +0000 (00:30 +0100)
simgear/math/Rect.hxx
simgear/props/propertyObject.hxx
simgear/props/propertyObject_test.cxx

index d5f252f495466accb18453392d5f43bb8ea2a820..d45d4a0f220acfe13b686c64346e8f810ba10b78 100644 (file)
@@ -74,6 +74,12 @@ namespace simgear
             && _y1 <= y && y <= _y2;
       }
 
+      bool contains(T x, T y, T margin) const
+      {
+        return (_x1 - margin) <= x && x <= (_x2 + margin)
+            && (_y1 - margin) <= y && y <= (_y2 + margin);
+      }
+
     private:
       T _x1, _x2, _y1, _y2;
   };
index 33c30a4580c4809ead8206e916e2f4e9d89dac3a..6a5e1ae7345d1a91fceff2f2bb02bb378d17c846 100644 (file)
@@ -122,6 +122,27 @@ public:
     return aValue;
   }
 
+#define SG_DEF_ASSIGN_OP(op)\
+  T operator op##=(const T rhs)\
+  {\
+    SGPropertyNode* n = getOrThrow();\
+    n->setValue<T>(n->getValue<T>() op rhs);\
+    return *this;\
+  }
+
+  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);
index 7021395a64839a0b0f3daa558b20425c87361476..9c354f465b37b386647de198064e6578667fbfbc 100644 (file)
@@ -110,6 +110,27 @@ void testAssignment()
   a3 = 44;
   assert(a1 == 44);
 
+  // Compound assignment ops
+  a1 *= 2;
+  assert(a1 == 88);
+  a1 /= 2;
+  assert(a1 == 44);
+  a1 += 2;
+  assert(a1 == 46);
+  a1 -= 16;
+  assert(a1 == 30);
+  a1 %= 28;
+  assert(a1 == 2);
+  a1 >>= 1;
+  assert(a1 == 1);
+  a1 <<= 2;
+  assert(a1 == 4);
+  a1 &= 1;
+  assert(a1 == 0);
+  a1 ^= 2;
+  assert(a1 == 2);
+  a1 |= 1;
+  assert(a1 == 3);
 }
 
 void testSTLContainer()