]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/props.hxx
Melchior FRANZ: fix SGPropertyNode::LAST_USED_ATTRIBUTE
[simgear.git] / simgear / props / props.hxx
index b9ba6495e2858d8ce51a4e591931d08608778351..8cf38e6da7954becd375207277a69e56381e837f 100644 (file)
@@ -760,7 +760,10 @@ public:
     REMOVED = 8,
     TRACE_READ = 16,
     TRACE_WRITE = 32,
-    USERARCHIVE = 64
+    USERARCHIVE = 64,
+    PRESERVE = 128
+    // beware: if you add another attribute here,
+    // also update value of "LAST_USED_ATTRIBUTE".
   };
 
 
@@ -1658,15 +1661,6 @@ private:
    */
   void trace_write () const;
 
-
-  /**
-   * Remove this node from all nodes that link to it in their path cache.
-   */
-  void remove_from_path_caches();
-
-
-  class hash_table;
-
   int _index;
   std::string _name;
   /// To avoid cyclic reference counting loops this shall not be a reference
@@ -1674,9 +1668,7 @@ private:
   SGPropertyNode * _parent;
   simgear::PropertyList _children;
   simgear::PropertyList _removedChildren;
-  std::vector<hash_table *> _linkedNodes;
   mutable std::string _buffer;
-  hash_table * _path_cache;
   simgear::props::Type _type;
   bool _tied;
   int _attr;
@@ -1698,66 +1690,7 @@ private:
 
   std::vector<SGPropertyChangeListener *> * _listeners;
 
-
-  /**
-   * Register/unregister node that links to this node in its path cache.
-   */
-  void add_linked_node (hash_table * node) { _linkedNodes.push_back(node); }
-  bool remove_linked_node (hash_table * node);
-
-
 \f
-  /**
-   * A very simple hash table.
-   */
-  class hash_table {
-  public:
-
-    /**
-     * An entry in a bucket in a hash table.
-     */
-    class entry {
-    public:
-      entry ();
-      ~entry ();
-      const char * get_key () { return _key.c_str(); }
-      void set_key (const char * key);
-      SGPropertyNode * get_value () { return _value; }
-      void set_value (SGPropertyNode * value);
-    private:
-      std::string _key;
-      SGSharedPtr<SGPropertyNode> _value;
-    };
-
-
-    /**
-     * A bucket in a hash table.
-     */
-    class bucket {
-    public:
-      bucket ();
-      ~bucket ();
-      entry * get_entry (const char * key, bool create = false);
-      bool erase (SGPropertyNode * node);
-      void clear (hash_table * owner);
-    private:
-      int _length;
-      entry ** _entries;
-    };
-
-    friend class bucket;
-
-    hash_table ();
-    ~hash_table ();
-    SGPropertyNode * get (const char * key);
-    void put (const char * key, SGPropertyNode * value);
-    bool erase (SGPropertyNode * node);
-
-  private:
-    unsigned int hashcode (const char * key);
-    unsigned int _data_length;
-    bucket ** _data;
-  };
   // Pass name as a pair of iterators
   template<typename Itr>
   SGPropertyNode * getChildImpl (Itr begin, Itr end, int index = 0, bool create = false);
@@ -1856,8 +1789,12 @@ bool SGPropertyNode::tie(const SGRawValue<T> &rawValue, bool useDefault)
         _type = EXTENDED;
     _tied = true;
     _value.val = rawValue.clone();
-    if (useDefault)
+    if (useDefault) {
+        int save_attributes = getAttributes();
+        setAttribute( WRITE, true );
         setValue(old_val);
+        setAttributes( save_attributes );
+    }
     return true;
 }