]> git.mxchange.org Git - simgear.git/commitdiff
Tweaks from David Megginson.
authorcurt <curt>
Fri, 19 Jan 2001 21:56:02 +0000 (21:56 +0000)
committercurt <curt>
Fri, 19 Jan 2001 21:56:02 +0000 (21:56 +0000)
simgear/misc/Makefile.am
simgear/misc/props.hxx
simgear/misc/props_io.cxx

index 9623cc6420fab45dd55212bc75eeb2abb74e60f1..8e91feb7c3d26fb27c07b5263195ed63802723be 100644 (file)
@@ -28,7 +28,7 @@ libsgmisc_a_SOURCES = \
 
 noinst_PROGRAMS = props_test
 
-props_test_SOURCES = props_test.cxx
+props_test_SOURCES = props_test.cxx props_test.hxx
 props_test_LDADD = libsgmisc.a ../xml/libsgxml.a ../debug/libsgdebug.a
 
 INCLUDES += -I$(top_srcdir) $(ZLIB_INCL)
index f8d007388e865300a83ab4571d1d895490a5b87c..a4579732bdc440c19230c4dc2c6fc3749c36b467 100644 (file)
@@ -473,6 +473,7 @@ bool readProperties (istream &input, SGPropertyNode * start_node);
 bool readProperties (const string &file, SGPropertyNode * start_node);
 bool writeProperties (ostream &output, const SGPropertyNode * start_node);
 bool writeProperties (const string &file, const SGPropertyNode * start_node);
+bool copyProperties (const SGPropertyNode *in, SGPropertyNode *out);
 
 
 #endif // __PROPS_HXX
index 2a0196b7753592a50dd3afb893b80a0141fe2e6e..aac7735bb32eba0760aedceb6f1729c6d47aa4a1 100644 (file)
@@ -329,3 +329,61 @@ writeProperties (const string &file, const SGPropertyNode * start_node)
     return false;
   }
 }
+
+
+/**
+ * Copy one property list to another.
+ */
+bool
+copyProperties (const SGPropertyNode *in, SGPropertyNode *out)
+{
+  bool retval = true;
+
+                               // First, copy the actual value,
+                               // if any.
+  if (in->hasValue()) {
+    switch (in->getType()) {
+    case SGValue::BOOL:
+      if (!out->setBoolValue(in->getBoolValue()))
+       retval = false;
+      break;
+    case SGValue::INT:
+      if (!out->setIntValue(in->getIntValue()))
+       retval = false;
+      break;
+    case SGValue::FLOAT:
+      if (!out->setFloatValue(in->getFloatValue()))
+       retval = false;
+      break;
+    case SGValue::DOUBLE:
+      if (!out->setDoubleValue(in->getDoubleValue()))
+       retval = false;
+      break;
+    case SGValue::STRING:
+      if (!out->setStringValue(in->getStringValue()))
+       retval = false;
+      break;
+    case SGValue::UNKNOWN:
+      if (!out->setUnknownValue(in->getStringValue()))
+       retval = false;
+      break;
+    default:
+      throw string("Unknown SGValue type"); // FIXME!!!
+    }
+  }
+
+                               // Next, copy the children.
+  int nChildren = in->nChildren();
+  for (int i = 0; i < nChildren; i++) {
+    const SGPropertyNode * in_child = in->getChild(i);
+    SGPropertyNode * out_child = out->getChild(in_child->getName(),
+                                              in_child->getIndex(),
+                                              true);
+    if (!copyProperties(in_child, out_child))
+      retval = false;
+  }
+
+  return retval;
+}
+
+// end of props_io.cxx