]> git.mxchange.org Git - flightgear.git/commitdiff
Remove unneeded function and add bool relative changes
authorThomas Geymayer <tomgey@gmail.com>
Sun, 12 Feb 2012 23:06:51 +0000 (00:06 +0100)
committerThorstenB <brehmt@gmail.com>
Sun, 19 Feb 2012 13:53:04 +0000 (14:53 +0100)
docs-mini/README.protocol
src/Network/generic.cxx
src/Network/generic.hxx

index 080c42bdaeb45a706c4e94b1a5223294d6e9dca0..e106f5f80aec743d00bfc56467cd0bc71422dcc9 100644 (file)
@@ -148,6 +148,9 @@ For input chunks there exist some more options:
                 (Usefull for eg. heading selector to start again with 1 for
                 values higher than 360)
 
+<rel>, <min>, <max> and <wrap> are only used for numeric data types. <rel> can
+additionally be used with type 'bool', where it toggles the value, if the received
+value evaluates to 'true', otherwise the value is left unchanged.
 
 Chunks can also consist of a single constant <format>, like in:
   <format>Data Section</format>
index 2f96180c914d9cf90150d4359fa7815e08e9a526..930a070849bf03121409f1513d55989e9afee4c2 100644 (file)
@@ -273,7 +273,6 @@ bool FGGeneric::gen_message() {
 bool FGGeneric::parse_message_binary(int length) {
     char *p2, *p1 = buf;
     int32_t tmp32;
-    double val;
     int i = -1;
 
     p2 = p1 + length;
@@ -291,7 +290,7 @@ bool FGGeneric::parse_message_binary(int length) {
             break;
 
         case FG_BOOL:
-            _in_message[i].prop->setBoolValue( p1[0] != 0 );
+            updateValue(_in_message[i], p1[0] != 0);
             p1 += 1;
             break;
 
@@ -338,7 +337,6 @@ bool FGGeneric::parse_message_binary(int length) {
 
 bool FGGeneric::parse_message_ascii(int length) {
     char *p2, *p1 = buf;
-    double val;
     int i = -1;
     int chunks = _in_message.size();
     int line_separator_size = line_separator.size();
@@ -365,7 +363,7 @@ bool FGGeneric::parse_message_ascii(int length) {
             break;
 
         case FG_BOOL:
-            _in_message[i].prop->setBoolValue( atof(p1) != 0.0 );
+            updateValue(_in_message[i], atof(p1) != 0.0);
             break;
 
         case FG_FIXED:
@@ -712,23 +710,16 @@ FGGeneric::read_config(SGPropertyNode *root, vector<_serial_prot> &msg)
     }
 }
 
-/*
-  set/getValue: Implementations for supported datatypes
-*/
-#define DEF_DATA_ACCESS(type, method)\
-template<>\
-const type FGGeneric::getValue(SGPropertyNode_ptr& prop)\
-{\
-  return prop->get##method##Value();\
-}\
-\
-template<>\
-void FGGeneric::setValue(SGPropertyNode_ptr& prop, const type& val)\
-{\
-  prop->set##method##Value(val);\
+void FGGeneric::updateValue(FGGeneric::_serial_prot& prot, bool val)
+{
+  if( prot.rel )
+  {
+    // value inverted if received true, otherwise leave unchanged
+    if( val )
+      setValue(prot.prop, !getValue<bool>(prot.prop));
+  }
+  else
+  {
+    setValue(prot.prop, val);
+  }
 }
-
-DEF_DATA_ACCESS(int, Int)
-DEF_DATA_ACCESS(float, Float)
-DEF_DATA_ACCESS(double, Double)
-
index eb732830bce8471460df1e6ff7439a5a5fba0063..0b27248f5882a9b11ee071c59d0d1430ed598cb4 100644 (file)
@@ -129,13 +129,9 @@ private:
 
       setValue(prot.prop, new_val);
     }
-
     
-    template<class T>
-    static const T getValue(SGPropertyNode_ptr& prop);
-
-    template<class T>
-    static void setValue(SGPropertyNode_ptr& prop, const T& val);
+    // Special handling for bool (relative change = toggle, no min/max, no wrap)
+    static void updateValue(_serial_prot& prot, bool val);
 };