diff --git a/src/FDM/JSBSim/math/FGTable.cpp b/src/FDM/JSBSim/math/FGTable.cpp index a45616ee4..a63e7fef2 100644 --- a/src/FDM/JSBSim/math/FGTable.cpp +++ b/src/FDM/JSBSim/math/FGTable.cpp @@ -8,21 +8,21 @@ ------------- Copyright (C) 2001 Jon S. Berndt (jon@jsbsim.org) ------------- This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) any + later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 59 + Temple Place - Suite 330, Boston, MA 02111-1307, USA. - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. + Further information about the GNU Lesser General Public License can also be + found on the world wide web at http://www.gnu.org. FUNCTIONAL DESCRIPTION -------------------------------------------------------------------------------- @@ -38,10 +38,6 @@ INCLUDES #include "FGTable.h" #include "input_output/FGXMLElement.h" -#include "input_output/FGPropertyManager.h" -#include -#include -#include using namespace std; @@ -51,7 +47,8 @@ namespace JSBSim { CLASS IMPLEMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -FGTable::FGTable(int NRows) : nRows(NRows), nCols(1), PropertyManager(0) +FGTable::FGTable(int NRows) + : nRows(NRows), nCols(1), PropertyManager(nullptr) { Type = tt1D; colCounter = 0; @@ -65,7 +62,8 @@ FGTable::FGTable(int NRows) : nRows(NRows), nCols(1), PropertyManager(0) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FGTable::FGTable(int NRows, int NCols) : nRows(NRows), nCols(NCols), PropertyManager(0) +FGTable::FGTable(int NRows, int NCols) + : nRows(NRows), nCols(NCols), PropertyManager(nullptr) { Type = tt2D; colCounter = 1; @@ -116,15 +114,8 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el, unsigned int i; stringstream buf; - string property_string; - string lookup_axis; - string call_type; - string parent_type; string brkpt_string; - FGPropertyNode* node; - Element *tableData=0; - Element *parent_element=0; - Element *axisElement=0; + Element *tableData = nullptr; string operation_types = "function, product, sum, difference, quotient," "pow, abs, sin, cos, asin, acos, tan, atan, table"; @@ -134,10 +125,10 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el, internal = false; Name = el->GetAttributeValue("name"); // Allow this table to be named with a property - call_type = el->GetAttributeValue("type"); + string call_type = el->GetAttributeValue("type"); if (call_type == string("internal")) { - parent_element = el->GetParent(); - parent_type = parent_element->GetName(); + Element* parent_element = el->GetParent(); + string parent_type = parent_element->GetName(); if (operation_types.find(parent_type) == string::npos) { internal = true; } else { @@ -155,12 +146,12 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el, } // Determine and store the lookup properties for this table unless this table - // is part of a 3D table, in which case its independentVar property indexes will - // be set by a call from the owning table during creation + // is part of a 3D table, in which case its independentVar property indexes + // will be set by a call from the owning table during creation dimension = 0; - axisElement = el->FindElement("independentVar"); + Element* axisElement = el->FindElement("independentVar"); if (axisElement) { // The 'internal' attribute of the table element cannot be specified @@ -173,24 +164,17 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el, internal = false; } - for (i=0; i<3; i++) lookupProperty[i] = 0; - while (axisElement) { - property_string = axisElement->GetDataLine(); + string property_string = axisElement->GetDataLine(); if (property_string.find("#") != string::npos) { if (is_number(Prefix)) { property_string = replace(property_string,"#",Prefix); } } - // The property string passed into GetNode() must have no spaces or tabs. - node = PropertyManager->GetNode(property_string); - if (node == 0) { - cerr << axisElement->ReadFrom(); - throw("IndependentVar property, " + property_string + " in Table definition is not defined."); - } - - lookup_axis = axisElement->GetAttributeValue("lookup"); + FGPropertyValue_ptr node = new FGPropertyValue(property_string, + PropertyManager); + string lookup_axis = axisElement->GetAttributeValue("lookup"); if (lookup_axis == string("row")) { lookupProperty[eRow] = node; } else if (lookup_axis == string("column")) { @@ -225,7 +209,8 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el, } else { brkpt_string = el->GetAttributeValue("breakPoint"); if (brkpt_string.empty()) { - // no independentVars found, and table is not marked as internal, nor is it a 3D table + // no independentVars found, and table is not marked as internal, nor is it + // a 3D table throw("No independent variable found for table."); } } @@ -286,8 +271,8 @@ FGTable::FGTable(FGPropertyManager* propMan, Element* el, for (i=0; iGetAttributeValueAsNumber("breakPoint"); - Tables[i]->SetRowIndexProperty(lookupProperty[eRow]); - Tables[i]->SetColumnIndexProperty(lookupProperty[eColumn]); + Tables[i]->lookupProperty[eRow] = lookupProperty[eRow]; + Tables[i]->lookupProperty[eColumn] = lookupProperty[eColumn]; tableData = el->FindNextElement("tableData"); } diff --git a/src/FDM/JSBSim/math/FGTable.h b/src/FDM/JSBSim/math/FGTable.h index a24990798..12a0ae98d 100644 --- a/src/FDM/JSBSim/math/FGTable.h +++ b/src/FDM/JSBSim/math/FGTable.h @@ -7,21 +7,21 @@ ------------- Copyright (C) 2001 Jon S. Berndt (jon@jsbsim.org) -------------- This program is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any later - version. + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) any + later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public License along with - this program; if not, write to the Free Software Foundation, Inc., 59 Temple - Place - Suite 330, Boston, MA 02111-1307, USA. + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 59 + Temple Place - Suite 330, Boston, MA 02111-1307, USA. - Further information about the GNU Lesser General Public License can also be found on - the world wide web at http://www.gnu.org. + Further information about the GNU Lesser General Public License can also be + found on the world wide web at http://www.gnu.org. HISTORY -------------------------------------------------------------------------------- @@ -38,11 +38,8 @@ SENTRY INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#include -#include -#include #include "FGParameter.h" -#include "input_output/FGPropertyManager.h" +#include "math/FGPropertyValue.h" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -278,13 +275,14 @@ public: FGTable& operator<<(const int n); inline double GetElement(int r, int c) const {return Data[r][c];} -// inline double GetElement(int r, int c, int t); - double operator()(unsigned int r, unsigned int c) const {return GetElement(r, c);} -// double operator()(unsigned int r, unsigned int c, unsigned int t) {GetElement(r, c, t);} + double operator()(unsigned int r, unsigned int c) const + { return GetElement(r, c); } - void SetRowIndexProperty(FGPropertyNode *node) {lookupProperty[eRow] = node;} - void SetColumnIndexProperty(FGPropertyNode *node) {lookupProperty[eColumn] = node;} + void SetRowIndexProperty(FGPropertyNode *node) + { lookupProperty[eRow] = new FGPropertyValue(node); } + void SetColumnIndexProperty(FGPropertyNode *node) + { lookupProperty[eColumn] = new FGPropertyValue(node); } unsigned int GetNumRows() const {return nRows;} @@ -296,7 +294,7 @@ private: enum type {tt1D, tt2D, tt3D} Type; enum axis {eRow=0, eColumn, eTable}; bool internal; - FGPropertyNode_ptr lookupProperty[3]; + FGPropertyValue_ptr lookupProperty[3]; double** Data; std::vector Tables; unsigned int nRows, nCols, nTables, dimension;