]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/input_output/FGXMLElement.h
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / FDM / JSBSim / input_output / FGXMLElement.h
old mode 100755 (executable)
new mode 100644 (file)
index 8248fb8..21af972
@@ -4,23 +4,23 @@
  Author:       Jon S. Berndt
  Date started: 9/28/04
 
- ------------- Copyright (C) 2004  Jon S. Berndt (jsb@hal-pc.org) -------------
+ ------------- Copyright (C) 2004  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 General Public License as published by the Free Software
+ 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 General Public License for more
+ FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
  details.
 
- You should have received a copy of the GNU General Public License along with
+ 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 General Public License can also be found on
+ Further information about the GNU Lesser General Public License can also be found on
  the world wide web at http://www.gnu.org.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -34,43 +34,17 @@ SENTRY
 INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#ifdef FGFS
-#  include <simgear/compiler.h>
-#  ifdef SG_HAVE_STD_INCLUDES
-#    include <string>
-#    include <vector>
-#    include <iostream>
-#    include <map>
-#  else
-#    include <vector.h>
-#    include <string>
-#    include <iostream.h>
-#    include <map.h>
-#  endif
-#else
-#  include <string>
-#  include <map>
-#  include <iostream>
-#  include <vector>
-   using std::string;
-   using std::map;
-   using std::vector;
-   using std::cout;
-   using std::endl;
-#endif
-   using std::string;
-   using std::map;
-   using std::vector;
-   using std::cout;
-   using std::endl;
+#include <string>
+#include <map>
+#include <vector>
 
-#include <math/FGColumnVector3.h>
+#include "math/FGColumnVector3.h"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 DEFINITIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-#define ID_XMLELEMENT "$Id$"
+#define ID_XMLELEMENT "$Id: FGXMLElement.h,v 1.16 2009/10/24 22:59:30 jberndt Exp $"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -108,6 +82,10 @@ CLASS DOCUMENTATION
     - convert["N"]["LBS"] = 0.22482;
     - convert["LBS"]["N"] = 1.0/convert["N"]["LBS"];
     - convert["KTS"]["FT/SEC"] = ktstofps;
+    - convert["KG/MIN"]["LBS/MIN"] = convert["KG"]["LBS"];
+    - convert["LBS/HP*HR"]["KG/KW*HR"] = 0.6083;
+    - convert["KG/KW*HR"]["LBS/HP*HR"] = 1/convert["LBS/HP*HR"]["KG/KW*HR"];
+    - convert["KG/L"]["LBS/GAL"] = 8.3454045;
 
     - convert["M"]["M"] = 1.00;
     - convert["FT"]["FT"] = 1.00;
@@ -131,6 +109,12 @@ CLASS DOCUMENTATION
     - convert["WATTS"]["WATTS"] = 1.00;
     - convert["KTS"]["KTS"] = 1.0;
     - convert["FT/SEC"]["FT/SEC"] = 1.0;
+    - convert["KG/MIN"]["KG/MIN"] = 1.0;
+    - convert["LBS/MIN"]["LBS/MIN"] = 1.0;
+    - convert["LBS/HP*HR"]["LBS/HP*HR"] = 1.0;
+    - convert["KG/KW*HR"]["KG/KW*HR"] = 1.0;
+    - convert["KG/L"]["KG/L"] = 1.0;
+    - convert["LBS/GAL"]["LBS/GAL"] = 1.0;
 
     Where:
     - N = newtons
@@ -141,13 +125,18 @@ CLASS DOCUMENTATION
     - FT = feet
     - FT2 = feet squared
     - SEC = seconds
+    - MIN = minutes
     - SLUG = slug
     - DEG = degrees
     - RAD = radians
     - WATTS = watts
+    - HP = horsepower
+    - HR = hour
+    - L = liter
+    - GAL = gallon (U.S. liquid) 
 
     @author Jon S. Berndt
-    @version $Id$
+    @version $Id: FGXMLElement.h,v 1.16 2009/10/24 22:59:30 jberndt Exp $
 */
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -159,7 +148,7 @@ public:
   /** Constructor
       @param nm the name of this element (if given)
       */
-  Element(string nm);
+  Element(const std::string& nm);
   /// Destructor
   ~Element(void);
 
@@ -167,32 +156,32 @@ public:
       @param key specifies the attribute key to retrieve the value of.
       @return the key value (as a string), or the empty string if no such
               attribute exists. */
-  string GetAttributeValue(string key);
+  std::string GetAttributeValue(const std::string& key);
 
   /** Retrieves an attribute value as a double precision real number.
       @param key specifies the attribute key to retrieve the value of.
       @return the key value (as a number), or the HUGE_VAL if no such
               attribute exists. */
-  double GetAttributeValueAsNumber(string key);
+  double GetAttributeValueAsNumber(const std::string& key);
 
   /** Retrieves the element name.
       @return the element name, or the empty string if no name has been set.*/
-  string GetName(void) {return name;}
+  const std::string& GetName(void) const {return name;}
 
   /** Gets a line of data belonging to an element.
       @param i the index of the data line to return (0 by default).
       @return a string representing the data line requested, or the empty string
               if none exists.*/
-  string GetDataLine(int i=0);
+  std::string GetDataLine(unsigned int i=0);
 
   /// Returns the number of lines of data stored
-  int GetNumDataLines(void) {return data_lines.size();}
+  unsigned int GetNumDataLines(void) {return (unsigned int)data_lines.size();}
 
   /// Returns the number of child elements for this element.
-  int GetNumElements(void) {return children.size();}
+  unsigned int GetNumElements(void) {return (unsigned int)children.size();}
 
   /// Returns the number of named child elements for this element.
-  int GetNumElements(string);
+  unsigned int GetNumElements(const std::string& element_name);
 
   /** Converts the element data to a number.
       This function attempts to convert the first (and presumably only) line of
@@ -208,7 +197,7 @@ public:
       GetNextElement() will return NULL.
       @param el the index of the requested element (0 by default)
       @return a pointer to the Element, or 0 if no valid element exists. */
-  Element* GetElement(int el=0);
+  Element* GetElement(unsigned int el=0);
 
   /** Returns a pointer to the next element in the list.
       The function GetElement() must be called first to be sure that this
@@ -230,7 +219,7 @@ public:
       element counter to the first element.
       @param el the search string (empty string by default).
       @return a pointer to the first element that matches the supplied search string. */
-  Element* FindElement(string el="");
+  Element* FindElement(const std::string& el="");
 
   /** Searches for the next element as specified.
       This function would be called after FindElement() is first called (in order to
@@ -241,7 +230,7 @@ public:
       @param el the name of the next element to find.
       @return the pointer to the found element, or 0 if no appropriate element us
               found.*/
-  Element* FindNextElement(string el="");
+  Element* FindNextElement(const std::string& el="");
 
   /** Searches for the named element and returns the string data belonging to it.
       This function allows the data belonging to a named element to be returned
@@ -251,7 +240,7 @@ public:
       default)
       @return the data value for the named element as a string, or the empty
               string if the element cannot be found. */
-  string FindElementValue(string el="");
+  std::string FindElementValue(const std::string& el="");
 
   /** Searches for the named element and returns the data belonging to it as a number.
       This function allows the data belonging to a named element to be returned
@@ -261,7 +250,7 @@ public:
       default)
       @return the data value for the named element as a double, or HUGE_VAL if the
               data is missing. */
-  double FindElementValueAsNumber(string el="");
+  double FindElementValueAsNumber(const std::string& el="");
 
   /** Searches for the named element and converts and returns the data belonging to it.
       This function allows the data belonging to a named element to be returned
@@ -278,7 +267,7 @@ public:
              to which the value returned will be converted.
       @return the unit-converted data value for the named element as a double,
               or HUGE_VAL if the data is missing. */
-  double FindElementValueAsNumberConvertTo(string el, string target_units);
+  double FindElementValueAsNumberConvertTo(const std::string& el, const std::string& target_units);
 
   /** Searches for the named element and converts and returns the data belonging to it.
       This function allows the data belonging to a named element to be returned
@@ -297,9 +286,9 @@ public:
              to which the value returned will be converted.
       @return the unit-converted data value for the named element as a double,
               or HUGE_VAL if the data is missing. */
-  double FindElementValueAsNumberConvertFromTo( string el,
-                                                string supplied_units,
-                                                string target_units);
+  double FindElementValueAsNumberConvertFromTo( const std::string& el,
+                                                const std::string& supplied_units,
+                                                const std::string& target_units);
 
   /** Composes a 3-element column vector for the supplied location or orientation.
       This function processes a LOCATION or ORIENTATION construct, returning a
@@ -310,7 +299,7 @@ public:
       @param target_units the string representing the native units used by JSBSim
              to which the value returned will be converted.
       @return a column vector object built from the LOCATION or ORIENT components. */
-  FGColumnVector3 FindElementTripletConvertTo( string target_units);
+  FGColumnVector3 FindElementTripletConvertTo( const std::string& target_units);
 
   /** This function sets the value of the parent class attribute to the supplied
       Element pointer.
@@ -324,27 +313,28 @@ public:
   /** Stores an attribute belonging to this element.
   *   @param name The string name of the attribute.
   *   @param value The string value of the attribute. */
-  void AddAttribute(string name, string value);
+  void AddAttribute(const std::string& name, const std::string& value);
 
   /** Stores data belonging to this element.
   *   @param d the data to store. */
-  void AddData(string d);
+  void AddData(std::string d);
 
   /** Prints the element.
   *   Prints this element and calls the Print routine for child elements.
   *   @param d The tab level. A level corresponds to a single space. */
-  void Print(int level=0);
+  void Print(unsigned int level=0);
 
 private:
-  string name;
-  map <string, string> attributes;
-  vector <string> data_lines;
-  vector <Element*> children;
-  vector <string> attribute_key;
+  std::string name;
+  std::map <std::string, std::string> attributes;
+  std::vector <std::string> data_lines;
+  std::vector <Element*> children;
+  std::vector <std::string> attribute_key;
   Element *parent;
-  int element_index;
-  typedef map <string, map <string, double> > tMapConvert;
-  tMapConvert convert;
+  unsigned int element_index;
+  typedef std::map <std::string, std::map <std::string, double> > tMapConvert;
+  static tMapConvert convert;
+  static bool converterIsInitialized;
 };
 
 } // namespace JSBSim