]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAPropertyDataElement.hxx
hla: add missing file fir the last commit.
[simgear.git] / simgear / hla / HLAPropertyDataElement.hxx
index 4441584e0fae3b9a4de9a44e50bff11bf15d4509..076d85ba5ce5e5c0aad1c39e365583bbc8dc297f 100644 (file)
 #ifndef HLAPropertyDataElement_hxx
 #define HLAPropertyDataElement_hxx
 
-#include <set>
 #include <simgear/props/props.hxx>
 #include "HLADataElement.hxx"
 
 namespace simgear {
 
-class HLAPropertyReference : public SGReferenced {
-public:
-    HLAPropertyReference()
-    { }
-    HLAPropertyReference(const std::string& relativePath) :
-        _relativePath(relativePath)
-    { }
-
-    void setIntValue(int value)
-    {
-        if (!_propertyNode.valid())
-            return;
-        _propertyNode->setIntValue(value);
-    }
-    int getIntValue() const
-    {
-        if (!_propertyNode.valid())
-            return 0;
-        return _propertyNode->getIntValue();
-    }
-
-    void setLongValue(long value)
-    {
-        if (!_propertyNode.valid())
-            return;
-        _propertyNode->setLongValue(value);
-    }
-    long getLongValue() const
-    {
-        if (!_propertyNode.valid())
-            return 0;
-        return _propertyNode->getLongValue();
-    }
-
-    void setFloatValue(float value)
-    {
-        if (!_propertyNode.valid())
-            return;
-        _propertyNode->setFloatValue(value);
-    }
-    float getFloatValue() const
-    {
-        if (!_propertyNode.valid())
-            return 0;
-        return _propertyNode->getFloatValue();
-    }
-
-    void setDoubleValue(double value)
-    {
-        if (!_propertyNode.valid())
-            return;
-        _propertyNode->setDoubleValue(value);
-    }
-    double getDoubleValue() const
-    {
-        if (!_propertyNode.valid())
-            return 0;
-        return _propertyNode->getDoubleValue();
-    }
-
-    void setStringValue(const std::string& value)
-    {
-        if (!_propertyNode.valid())
-            return;
-        _propertyNode->setStringValue(value);
-    }
-    std::string getStringValue() const
-    {
-        if (!_propertyNode.valid())
-            return std::string();
-        return _propertyNode->getStringValue();
-    }
-
-    SGPropertyNode* getPropertyNode()
-    { return _propertyNode.get(); }
-
-    void setRootNode(SGPropertyNode* rootNode)
-    {
-        if (!rootNode)
-            _propertyNode.clear();
-        else
-            _propertyNode = rootNode->getNode(_relativePath, true);
-    }
-
-private:
-    std::string _relativePath;
-    SGSharedPtr<SGPropertyNode> _propertyNode;
-};
-
-class HLAPropertyReferenceSet : public SGReferenced {
-public:
-    void insert(const SGSharedPtr<HLAPropertyReference>& propertyReference)
-    {
-        _propertyReferenceSet.insert(propertyReference);
-        propertyReference->setRootNode(_rootNode.get());
-    }
-    void remove(const SGSharedPtr<HLAPropertyReference>& propertyReference)
-    {
-        PropertyReferenceSet::iterator i = _propertyReferenceSet.find(propertyReference);
-        if (i == _propertyReferenceSet.end())
-            return;
-        _propertyReferenceSet.erase(i);
-        propertyReference->setRootNode(0);
-    }
-
-    void setRootNode(SGPropertyNode* rootNode)
-    {
-        _rootNode = rootNode;
-        for (PropertyReferenceSet::iterator i = _propertyReferenceSet.begin();
-             i != _propertyReferenceSet.end(); ++i) {
-            (*i)->setRootNode(_rootNode.get());
-        }
-    }
-    SGPropertyNode* getRootNode()
-    { return _rootNode.get(); }
-
-private:
-    SGSharedPtr<SGPropertyNode> _rootNode;
-
-    typedef std::set<SGSharedPtr<HLAPropertyReference> > PropertyReferenceSet;
-    PropertyReferenceSet _propertyReferenceSet;
-};
-
 class HLAPropertyDataElement : public HLADataElement {
 public:
-    HLAPropertyDataElement(HLAPropertyReference* propertyReference);
-    HLAPropertyDataElement(const simgear::HLADataType* dataType, HLAPropertyReference* propertyReference);
-    ~HLAPropertyDataElement();
+    HLAPropertyDataElement();
+    HLAPropertyDataElement(SGPropertyNode* propertyNode);
+    HLAPropertyDataElement(const HLADataType* dataType, SGPropertyNode* propertyNode);
+    HLAPropertyDataElement(const HLADataType* dataType);
+    virtual ~HLAPropertyDataElement();
 
     virtual bool encode(HLAEncodeStream& stream) const;
     virtual bool decode(HLADecodeStream& stream);
@@ -159,12 +37,16 @@ public:
     virtual const HLADataType* getDataType() const;
     virtual bool setDataType(const HLADataType* dataType);
 
+    void setPropertyNode(SGPropertyNode* propertyNode);
+    SGPropertyNode* getPropertyNode();
+    const SGPropertyNode* getPropertyNode() const;
+    
 private:
     class DecodeVisitor;
     class EncodeVisitor;
 
     SGSharedPtr<const HLADataType> _dataType;
-    SGSharedPtr<HLAPropertyReference> _propertyReference;
+    SGSharedPtr<SGPropertyNode> _propertyNode;
 };
 
 } // namespace simgear