]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/models/flight_control/FGFCSComponent.cpp
Merge branch 'next' of git://gitorious.org/fg/flightgear into next
[flightgear.git] / src / FDM / JSBSim / models / flight_control / FGFCSComponent.cpp
index 6cdf9ab8334ab381cb00c91f759369817637b4bb..2fc74bd9639ded2471024fc7067c209cf3c5800b 100644 (file)
@@ -40,6 +40,7 @@ INCLUDES
 #include "FGFCSComponent.h"
 #include "input_output/FGPropertyManager.h"
 #include "input_output/FGXMLElement.h"
+#include "math/FGPropertyValue.h"
 #include <iostream>
 #include <cstdlib>
 
@@ -47,7 +48,7 @@ using namespace std;
 
 namespace JSBSim {
 
-static const char *IdSrc = "$Id: FGFCSComponent.cpp,v 1.29 2010/09/07 00:40:03 jberndt Exp $";
+static const char *IdSrc = "$Id: FGFCSComponent.cpp,v 1.32 2011/06/16 03:39:38 jberndt Exp $";
 static const char *IdHdr = ID_FCSCOMPONENT;
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -57,7 +58,7 @@ CLASS IMPLEMENTATION
 FGFCSComponent::FGFCSComponent(FGFCS* _fcs, Element* element) : fcs(_fcs)
 {
   Element *input_element, *clip_el;
-  Input = Output = clipmin = clipmax = 0.0;
+  Input = Output = clipmin = clipmax = delay_time = 0.0;
   treenode = 0;
   delay = index = 0;
   ClipMinPropertyNode = ClipMaxPropertyNode = 0;
@@ -111,8 +112,6 @@ FGFCSComponent::FGFCSComponent(FGFCS* _fcs, Element* element) : fcs(_fcs)
 
   Name = element->GetAttributeValue("name");
 
-  FGPropertyManager *tmp=0;
-
   input_element = element->FindElement("input");
   while (input_element) {
     input = input_element->GetDataLine();
@@ -122,14 +121,14 @@ FGFCSComponent::FGFCSComponent(FGFCS* _fcs, Element* element) : fcs(_fcs)
     } else {
       InputSigns.push_back( 1.0);
     }
+    FGPropertyManager* node = 0L;
     if (PropertyManager->HasNode(input)) {
-      tmp = PropertyManager->GetNode(input);
+      node = PropertyManager->GetNode(input);
+      InputNodes.push_back(new FGPropertyValue( node ));
     } else {
-      tmp = 0L;
-      // cerr << fgcyan << "In component: " + Name + " property "
-      //      + input + " is initially undefined." << reset << endl;
+      InputNodes.push_back(new FGPropertyValue( input,
+                                                PropertyManager ));
     }
-    InputNodes.push_back( tmp );
     InputNames.push_back( input );
 
     input_element = element->FindNextElement("input");
@@ -150,18 +149,18 @@ FGFCSComponent::FGFCSComponent(FGFCS* _fcs, Element* element) : fcs(_fcs)
 
   Element* delay_elem = element->FindElement("delay");
   if ( delay_elem ) {
-    delay = (unsigned int)delay_elem->GetDataAsNumber();
+    delay_time = delay_elem->GetDataAsNumber();
     string delayType = delay_elem->GetAttributeValue("type");
     if (delayType.length() > 0) {
       if (delayType == "time") {
-        delay = (int)(delay / dt);
+        delay = (unsigned int)(delay_time / dt);
       } else if (delayType == "frames") {
-        // no op. the delay type of "frames" is assumed and is the default.
+        delay = (unsigned int)delay_time;
       } else {
         cerr << "Unallowed delay type" << endl;
       }
     } else {
-      delay = (int)(delay / dt);
+      delay = (unsigned int)(delay_time / dt);
     }
     output_array.resize(delay);
     for (int i=0; i<delay; i++) output_array[i] = 0.0;
@@ -200,6 +199,9 @@ FGFCSComponent::FGFCSComponent(FGFCS* _fcs, Element* element) : fcs(_fcs)
 FGFCSComponent::~FGFCSComponent()
 {
   Debug(1);
+  for (unsigned int i=0; i<InputNodes.size(); i++) {
+    delete InputNodes[i];
+  }
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -238,24 +240,6 @@ void FGFCSComponent::Clip(void)
   }
 }
 
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGFCSComponent::LateBind(void)
-{
-  FGPropertyManager* node = 0L;
-
-  for (unsigned int i=0; i<InputNodes.size(); i++) {
-    if (!InputNodes[i]) {
-      if (PropertyManager->HasNode(InputNames[i])) {
-        node = PropertyManager->GetNode(InputNames[i]);
-        InputNodes[i] = node;
-      } else {
-        throw(InputNames[i]);
-      }
-    }
-  }
-}
-
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 //
 // The old way of naming FCS components allowed upper or lower case, spaces, etc.