X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAPropertyDataElement.hxx;h=076d85ba5ce5e5c0aad1c39e365583bbc8dc297f;hb=264e336a4941a719362c75b3415a92e9098b2719;hp=4441584e0fae3b9a4de9a44e50bff11bf15d4509;hpb=ce71b8c1cf761742ab88975442f4037b5e460114;p=simgear.git diff --git a/simgear/hla/HLAPropertyDataElement.hxx b/simgear/hla/HLAPropertyDataElement.hxx index 4441584e..076d85ba 100644 --- a/simgear/hla/HLAPropertyDataElement.hxx +++ b/simgear/hla/HLAPropertyDataElement.hxx @@ -18,140 +18,18 @@ #ifndef HLAPropertyDataElement_hxx #define HLAPropertyDataElement_hxx -#include #include #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 _propertyNode; -}; - -class HLAPropertyReferenceSet : public SGReferenced { -public: - void insert(const SGSharedPtr& propertyReference) - { - _propertyReferenceSet.insert(propertyReference); - propertyReference->setRootNode(_rootNode.get()); - } - void remove(const SGSharedPtr& 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 _rootNode; - - typedef std::set > 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 _dataType; - SGSharedPtr _propertyReference; + SGSharedPtr _propertyNode; }; } // namespace simgear