]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/props.hxx
Remove unneeded inclusions of windows.h, GL.h and GLU.H
[simgear.git] / simgear / props / props.hxx
index 12d7ba7986c12662b01b77e571d21a9bca3d1150..f9b469fe6aa0e4ab2d60cc2122a6cc336ce07700 100644 (file)
 #endif
 
 #include <vector>
-
-#if PROPS_STANDALONE
-
 #include <string>
-#include <iostream>
-
-using std::string;
-using std::vector;
-using std::istream;
-using std::ostream;
 
+#if PROPS_STANDALONE
 #else
-
 #include <simgear/compiler.h>
 #include <simgear/debug/logstream.hxx>
-#include STL_STRING
-#include STL_IOSTREAM
-SG_USING_STD(string);
-SG_USING_STD(vector);
-SG_USING_STD(istream);
-SG_USING_STD(ostream);
-
 #endif
 
+
+
 #include <simgear/structure/SGReferenced.hxx>
 #include <simgear/structure/SGSharedPtr.hxx>
 
@@ -479,7 +465,7 @@ protected:
   virtual void unregister_property (SGPropertyNode * node);
 
 private:
-  vector<SGPropertyNode *> _properties;
+  std::vector<SGPropertyNode *> _properties;
 };
 
 
@@ -628,6 +614,14 @@ public:
     return (getChild(name, index) != 0);
   }
 
+  /**
+   * Test whether a named child exists.
+   */
+  bool hasChild (const std::string& name, int index = 0) const
+  {
+    return (getChild(name, index) != 0);
+  }
+
 
   /**
    * Get a child node by name and index.
@@ -635,18 +629,36 @@ public:
   SGPropertyNode * getChild (const char * name, int index = 0,
                             bool create = false);
 
+  /**
+   * Get a child node by name and index.
+   */
+  SGPropertyNode * getChild (const std::string& name, int index = 0,
+                            bool create = false)
+  { return getChild(name.c_str(), index, create); }
+
 
   /**
    * Get a const child node by name and index.
    */
   const SGPropertyNode * getChild (const char * name, int index = 0) const;
 
+  /**
+   * Get a const child node by name and index.
+   */
+  const SGPropertyNode * getChild (const std::string& name, int index = 0) const
+  { return getChild(name.c_str(), index); }
+
 
   /**
    * Get a vector of all children with the specified name.
    */
-  vector<SGPropertyNode_ptr> getChildren (const char * name) const;
+  std::vector<SGPropertyNode_ptr> getChildren (const char * name) const;
 
+  /**
+   * Get a vector of all children with the specified name.
+   */
+  std::vector<SGPropertyNode_ptr> getChildren (const std::string& name) const
+  { return getChildren(name.c_str()); }
 
   /**
    * Remove child by position.
@@ -660,13 +672,27 @@ public:
   SGPropertyNode_ptr removeChild (const char * name, int index = 0,
                                   bool keep = true);
 
+  /**
+   * Remove a child node
+   */
+  SGPropertyNode_ptr removeChild (const std::string& name, int index = 0,
+                                  bool keep = true)
+  { return removeChild(name.c_str(), index, keep); }
+
   /**
    * Remove all children with the specified name.
    */
-  vector<SGPropertyNode_ptr> removeChildren (const char * name,
+  std::vector<SGPropertyNode_ptr> removeChildren (const char * name,
                                              bool keep = true);
 
 
+  /**
+   * Remove all children with the specified name.
+   */
+  std::vector<SGPropertyNode_ptr> removeChildren (const std::string& name,
+                                             bool keep = true)
+  { return removeChildren(name.c_str(), keep); }
+
   //
   // Alias support.
   //
@@ -683,6 +709,12 @@ public:
    */
   bool alias (const char * path);
 
+  /**
+   * Alias this node's leaf value to another's by relative path.
+   */
+  bool alias (const std::string& path)
+  { return alias(path.c_str()); }
+
 
   /**
    * Remove any alias for this node.
@@ -736,6 +768,11 @@ public:
    */
   SGPropertyNode * getNode (const char * relative_path, bool create = false);
 
+  /**
+   * Get a pointer to another node by relative path.
+   */
+  SGPropertyNode * getNode (const std::string& relative_path, bool create = false)
+  { return getNode(relative_path.c_str(), create); }
 
   /**
    * Get a pointer to another node by relative path.
@@ -750,12 +787,31 @@ public:
   SGPropertyNode * getNode (const char * relative_path, int index,
                            bool create = false);
 
+  /**
+   * Get a pointer to another node by relative path.
+   *
+   * This method leaves the index off the last member of the path,
+   * so that the user can specify it separately (and save some
+   * string building).  For example, getNode("/bar[1]/foo", 3) is
+   * exactly equivalent to getNode("bar[1]/foo[3]").  The index
+   * provided overrides any given in the path itself for the last
+   * component.
+   */
+  SGPropertyNode * getNode (const std::string& relative_path, int index,
+                           bool create = false)
+  { return getNode(relative_path.c_str(), index, create); }
 
   /**
    * Get a const pointer to another node by relative path.
    */
   const SGPropertyNode * getNode (const char * relative_path) const;
 
+  /**
+   * Get a const pointer to another node by relative path.
+   */
+  const SGPropertyNode * getNode (const std::string& relative_path) const
+  { return getNode(relative_path.c_str()); }
+
 
   /**
    * Get a const pointer to another node by relative path.
@@ -766,6 +822,15 @@ public:
   const SGPropertyNode * getNode (const char * relative_path,
                                  int index) const;
 
+  /**
+   * Get a const pointer to another node by relative path.
+   *
+   * This method leaves the index off the last member of the path,
+   * so that the user can specify it separate.
+   */
+  const SGPropertyNode * getNode (const std::string& relative_path,
+                                 int index) const
+  { return getNode(relative_path.c_str(), index); }
 
   //
   // Access Mode.
@@ -880,6 +945,12 @@ public:
    */
   bool setStringValue (const char * value);
 
+  /**
+   * Set a string value for this node.
+   */
+  bool setStringValue (const std::string& value)
+  { return setStringValue(value.c_str()); }
+
 
   /**
    * Set a value of unspecified type for this node.
@@ -951,12 +1022,22 @@ public:
    */
   Type getType (const char * relative_path) const;
 
+  /**
+   * Get another node's type.
+   */
+  Type getType (const std::string& relative_path) const
+  { return getType(relative_path.c_str()); }
 
   /**
    * Test whether another node has a leaf value.
    */
   bool hasValue (const char * relative_path) const;
 
+  /**
+   * Test whether another node has a leaf value.
+   */
+  bool hasValue (const std::string& relative_path) const
+  { return hasValue(relative_path.c_str()); }
 
   /**
    * Get another node's value as a bool.
@@ -964,6 +1045,12 @@ public:
   bool getBoolValue (const char * relative_path,
                     bool defaultValue = false) const;
 
+  /**
+   * Get another node's value as a bool.
+   */
+  bool getBoolValue (const std::string& relative_path,
+                    bool defaultValue = false) const
+  { return getBoolValue(relative_path.c_str(), defaultValue); }
 
   /**
    * Get another node's value as an int.
@@ -971,6 +1058,13 @@ public:
   int getIntValue (const char * relative_path,
                   int defaultValue = 0) const;
 
+  /**
+   * Get another node's value as an int.
+   */
+  int getIntValue (const std::string& relative_path,
+                   int defaultValue = 0) const
+  { return getIntValue(relative_path.c_str(), defaultValue); }
+
 
   /**
    * Get another node's value as a long int.
@@ -978,20 +1072,39 @@ public:
   long getLongValue (const char * relative_path,
                     long defaultValue = 0L) const;
 
+  /**
+   * Get another node's value as a long int.
+   */
+  long getLongValue (const std::string& relative_path,
+                    long defaultValue = 0L) const
+  { return getLongValue(relative_path.c_str(), defaultValue); }
 
   /**
    * Get another node's value as a float.
    */
   float getFloatValue (const char * relative_path,
-                      float defaultValue = 0.0) const;
+                      float defaultValue = 0.0f) const;
+
+  /**
+   * Get another node's value as a float.
+   */
+  float getFloatValue (const std::string& relative_path,
+                      float defaultValue = 0.0f) const
+  { return getFloatValue(relative_path.c_str(), defaultValue); }
 
 
   /**
    * Get another node's value as a double.
    */
   double getDoubleValue (const char * relative_path,
-                        double defaultValue = 0.0L) const;
+                        double defaultValue = 0.0) const;
 
+  /**
+   * Get another node's value as a double.
+   */
+  double getDoubleValue (const std::string& relative_path,
+                        double defaultValue = 0.0) const
+  { return getDoubleValue(relative_path.c_str(), defaultValue); }
 
   /**
    * Get another node's value as a string.
@@ -1000,41 +1113,85 @@ public:
                               const char * defaultValue = "") const;
 
 
+  /**
+   * Get another node's value as a string.
+   */
+  const char * getStringValue (const std::string& relative_path,
+                              const char * defaultValue = "") const
+  { return getStringValue(relative_path.c_str(), defaultValue); }
+
+
   /**
    * Set another node's value as a bool.
    */
   bool setBoolValue (const char * relative_path, bool value);
 
+  /**
+   * Set another node's value as a bool.
+   */
+  bool setBoolValue (const std::string& relative_path, bool value)
+  { return setBoolValue(relative_path.c_str(), value); }
+
 
   /**
    * Set another node's value as an int.
    */
   bool setIntValue (const char * relative_path, int value);
 
+  /**
+   * Set another node's value as an int.
+   */
+  bool setIntValue (const std::string& relative_path, int value)
+  { return setIntValue(relative_path.c_str(), value); }
+
 
   /**
    * Set another node's value as a long int.
    */
   bool setLongValue (const char * relative_path, long value);
 
+  /**
+   * Set another node's value as a long int.
+   */
+  bool setLongValue (const std::string& relative_path, long value)
+  { return setLongValue(relative_path.c_str(), value); }
+
 
   /**
    * Set another node's value as a float.
    */
   bool setFloatValue (const char * relative_path, float value);
 
+  /**
+   * Set another node's value as a float.
+   */
+  bool setFloatValue (const std::string& relative_path, float value)
+  { return setFloatValue(relative_path.c_str(), value); }
+
 
   /**
    * Set another node's value as a double.
    */
   bool setDoubleValue (const char * relative_path, double value);
 
+  /**
+   * Set another node's value as a double.
+   */
+  bool setDoubleValue (const std::string& relative_path, double value)
+  { return setDoubleValue(relative_path.c_str(), value); }
+
 
   /**
    * Set another node's value as a string.
    */
   bool setStringValue (const char * relative_path, const char * value);
 
+  /**
+   * Set another node's value as a string.
+   */
+  bool setStringValue (const std::string& relative_path, const char * value)
+  { return setStringValue(relative_path.c_str(), value); }
+
 
   /**
    * Set another node's value with no specified type.
@@ -1047,6 +1204,11 @@ public:
    */
   bool isTied (const char * relative_path) const;
 
+  /**
+   * Test whether another node is bound to an external data source.
+   */
+  bool isTied (const std::string& relative_path) const
+  { return isTied(relative_path.c_str()); }
 
   /**
    * Bind another node to an external bool source.
@@ -1054,6 +1216,13 @@ public:
   bool tie (const char * relative_path, const SGRawValue<bool> &rawValue,
            bool useDefault = true);
 
+  /**
+   * Bind another node to an external bool source.
+   */
+  bool tie (const std::string& relative_path, const SGRawValue<bool> &rawValue,
+           bool useDefault = true)
+  { return tie(relative_path.c_str(), rawValue, useDefault); }
+
 
   /**
    * Bind another node to an external int source.
@@ -1061,6 +1230,13 @@ public:
   bool tie (const char * relative_path, const SGRawValue<int> &rawValue,
            bool useDefault = true);
 
+  /**
+   * Bind another node to an external int source.
+   */
+  bool tie (const std::string& relative_path, const SGRawValue<int> &rawValue,
+           bool useDefault = true)
+  { return tie(relative_path.c_str(), rawValue, useDefault); }
+
 
   /**
    * Bind another node to an external long int source.
@@ -1068,6 +1244,13 @@ public:
   bool tie (const char * relative_path, const SGRawValue<long> &rawValue,
            bool useDefault = true);
 
+  /**
+   * Bind another node to an external long int source.
+   */
+  bool tie (const std::string& relative_path, const SGRawValue<long> &rawValue,
+           bool useDefault = true)
+  { return tie(relative_path.c_str(), rawValue, useDefault); }
+
 
   /**
    * Bind another node to an external float source.
@@ -1075,6 +1258,13 @@ public:
   bool tie (const char * relative_path, const SGRawValue<float> &rawValue,
            bool useDefault = true);
 
+  /**
+   * Bind another node to an external float source.
+   */
+  bool tie (const std::string& relative_path, const SGRawValue<float> &rawValue,
+           bool useDefault = true)
+  { return tie(relative_path.c_str(), rawValue, useDefault); }
+
 
   /**
    * Bind another node to an external double source.
@@ -1082,6 +1272,13 @@ public:
   bool tie (const char * relative_path, const SGRawValue<double> &rawValue,
            bool useDefault = true);
 
+  /**
+   * Bind another node to an external double source.
+   */
+  bool tie (const std::string& relative_path, const SGRawValue<double> &rawValue,
+           bool useDefault = true)
+  { return tie(relative_path.c_str(), rawValue, useDefault); }
+
 
   /**
    * Bind another node to an external string source.
@@ -1089,12 +1286,25 @@ public:
   bool tie (const char * relative_path, const SGRawValue<const char *> &rawValue,
            bool useDefault = true);
 
+  /**
+   * Bind another node to an external string source.
+   */
+  bool tie (const std::string& relative_path, const SGRawValue<const char*> &rawValue,
+           bool useDefault = true)
+  { return tie(relative_path.c_str(), rawValue, useDefault); }
+
 
   /**
    * Unbind another node from any external data source.
    */
   bool untie (const char * relative_path);
 
+  /**
+   * Unbind another node from any external data source.
+   */
+  bool untie (const std::string& relative_path)
+  { return untie(relative_path.c_str()); }
+
 
   /**
    * Add a change listener to the property. If "initial" is set call the
@@ -1110,6 +1320,12 @@ public:
   void removeChangeListener (SGPropertyChangeListener * listener);
 
 
+  /**
+   * Get the number of listeners.
+   */
+  int nListeners () const { return _listeners ? _listeners->size() : 0; }
+
+
   /**
    * Fire a value change event to all listeners.
    */
@@ -1192,16 +1408,16 @@ private:
   class hash_table;
 
   int _index;
-  string _name;
-  mutable string _display_name;
+  std::string _name;
+  mutable std::string _display_name;
   /// To avoid cyclic reference counting loops this shall not be a reference
   /// counted pointer
   SGPropertyNode * _parent;
-  vector<SGPropertyNode_ptr> _children;
-  vector<SGPropertyNode_ptr> _removedChildren;
-  vector<hash_table *> _linkedNodes;
-  mutable string _path;
-  mutable string _buffer;
+  std::vector<SGPropertyNode_ptr> _children;
+  std::vector<SGPropertyNode_ptr> _removedChildren;
+  std::vector<hash_table *> _linkedNodes;
+  mutable std::string _path;
+  mutable std::string _buffer;
   hash_table * _path_cache;
   Type _type;
   bool _tied;
@@ -1227,7 +1443,7 @@ private:
     char * string_val;
   } _local_val;
 
-  vector <SGPropertyChangeListener *> * _listeners;
+  std::vector<SGPropertyChangeListener *> * _listeners;
 
 
   /**
@@ -1256,7 +1472,7 @@ private:
       SGPropertyNode * get_value () { return _value; }
       void set_value (SGPropertyNode * value);
     private:
-      string _key;
+      std::string _key;
       SGSharedPtr<SGPropertyNode> _value;
     };