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 Lesser General Public License as published by the Free Software
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
- 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;
- 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
- 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 $
*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/** Constructor
@param nm the name of this element (if given)
*/
- Element(string nm);
+ Element(const std::string& nm);
/// Destructor
~Element(void);
@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(unsigned int i=0);
+ std::string GetDataLine(unsigned int i=0);
/// Returns the number of lines of data stored
unsigned int GetNumDataLines(void) {return (unsigned int)data_lines.size();}
unsigned int GetNumElements(void) {return (unsigned int)children.size();}
/// Returns the number of named child elements for this element.
- unsigned 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
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
@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
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
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
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
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
@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.
/** 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.
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;
unsigned int element_index;
- typedef map <string, map <string, double> > tMapConvert;
- tMapConvert convert;
+ typedef std::map <std::string, std::map <std::string, double> > tMapConvert;
+ static tMapConvert convert;
+ static bool converterIsInitialized;
};
} // namespace JSBSim