]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scripting/nasal-props.cxx
Remove osg dependency for isNaN only.
[flightgear.git] / src / Scripting / nasal-props.cxx
index 6eaa5ed3010be88b8596cb27728ffb6c2bf97daa..6112144f2af2c0b4e4495942deb21261c24ccefe 100644 (file)
@@ -185,7 +185,7 @@ static naRef f_getValue(naContext c, naRef me, int argc, naRef* args)
     case props::DOUBLE:
     {
         double dv = (*node)->getDoubleValue();
-        if (osg::isNaN(dv)) {
+        if (SGMisc<double>::isNaN(dv)) {
           SG_LOG(SG_NASAL, SG_ALERT, "Nasal getValue: property " << (*node)->getPath() << " is NaN");
           return naNil();
         }
@@ -242,7 +242,7 @@ static naRef f_setValue(naContext c, naRef me, int argc, naRef* args)
             naRuntimeError(c, "props.setValue() with non-number");
 
         double d = naNumValue(val).num;
-        if (osg::isNaN(d)) {
+        if (SGMisc<double>::isNaN(d)) {
           naRuntimeError(c, "props.setValue() passed a NaN");
         }
 
@@ -282,7 +282,7 @@ static naRef f_setDoubleValue(naContext c, naRef me, int argc, naRef* args)
     if (naIsNil(r))
         naRuntimeError(c, "props.setDoubleValue() with non-number");
 
-    if (osg::isNaN(r.num)) {
+    if (SGMisc<double>::isNaN(r.num)) {
       naRuntimeError(c, "props.setDoubleValue() passed a NaN");
     }
 
@@ -303,7 +303,7 @@ static naRef f_getChild(naContext c, naRef me, int argc, naRef* args)
     naRef child = naVec_get(argv, 0);
     if(!naIsString(child)) return naNil();
     naRef idx = naNumValue(naVec_get(argv, 1));
-    bool create = naTrue(naVec_get(argv, 2));
+    bool create = naTrue(naVec_get(argv, 2)) != 0;
     SGPropertyNode* n;
     try {
         if(naIsNil(idx) || !naIsNum(idx)) {
@@ -360,7 +360,7 @@ static naRef f_addChild(naContext c, naRef me, int argc, naRef* args)
 
       bool append = true;
       if( !naIsNil(ref_append) )
-        append = naTrue(ref_append);
+        append = naTrue(ref_append) != 0;
 
       n = (*node)->addChild(naStr_data(child), min_index, append);
     }
@@ -373,6 +373,45 @@ static naRef f_addChild(naContext c, naRef me, int argc, naRef* args)
     return propNodeGhostCreate(c, n);
 }
 
+static naRef f_addChildren(naContext c, naRef me, int argc, naRef* args)
+{
+    NODEARG();
+    naRef child = naVec_get(argv, 0);
+    if(!naIsString(child)) return naNil();
+    naRef ref_count = naNumValue(naVec_get(argv, 1));
+    naRef ref_min_index = naNumValue(naVec_get(argv, 2));
+    naRef ref_append = naVec_get(argv, 3);
+    try
+    {
+      size_t count = 0;
+      if( !naIsNum(ref_count) )
+        throw string("props.addChildren() missing number of children");
+      count = ref_count.num;
+
+      int min_index = 0;
+      if( !naIsNil(ref_min_index) && naIsNum(ref_min_index) )
+        min_index = ref_min_index.num;
+
+      bool append = true;
+      if( !naIsNil(ref_append) )
+        append = naTrue(ref_append) != 0;
+
+      const simgear::PropertyList& nodes =
+        (*node)->addChildren(naStr_data(child), count, min_index, append);
+
+      naRef result = naNewVector(c);
+      for( size_t i = 0; i < nodes.size(); ++i )
+        naVec_append(result, propNodeGhostCreate(c, nodes[i]));
+      return result;
+    }
+    catch (const string& err)
+    {
+      naRuntimeError(c, (char *)err.c_str());
+    }
+
+    return naNil();
+}
+
 static naRef f_removeChild(naContext c, naRef me, int argc, naRef* args)
 {
     NODEARG();
@@ -395,7 +434,7 @@ static naRef f_removeChildren(naContext c, naRef me, int argc, naRef* args)
     if(naIsNil(argv) || naVec_size(argv) == 0) {
         // Remove all children
         for(int i = (*node)->nChildren() - 1; i >=0; i--)
-            naVec_append(result, propNodeGhostCreate(c, (*node)->removeChild(i)));
+            naVec_append(result, propNodeGhostCreate(c, (*node)->removeChild(i, false)));
     } else {
         // Remove all children of a specified name
         naRef name = naVec_get(argv, 0);
@@ -445,7 +484,7 @@ static naRef f_getNode(naContext c, naRef me, int argc, naRef* args)
 {
     NODEARG();
     naRef path = naVec_get(argv, 0);
-    bool create = naTrue(naVec_get(argv, 1));
+    bool create = naTrue(naVec_get(argv, 1)) != 0;
     if(!naIsString(path)) return naNil();
     SGPropertyNode* n;
     try {
@@ -485,6 +524,7 @@ static struct {
     { f_getChild, "_getChild" },
     { f_getChildren, "_getChildren" },
     { f_addChild, "_addChild" },
+    { f_addChildren, "_addChildren" },
     { f_removeChild, "_removeChild" },
     { f_removeChildren, "_removeChildren" },
     { f_alias, "_alias" },