hla: Provide a directly property based api for property data element.
This commit is contained in:
parent
8e92c5d985
commit
bcb320b537
@ -23,70 +23,70 @@ namespace simgear {
|
|||||||
|
|
||||||
class HLAPropertyDataElement::DecodeVisitor : public HLADataTypeDecodeVisitor {
|
class HLAPropertyDataElement::DecodeVisitor : public HLADataTypeDecodeVisitor {
|
||||||
public:
|
public:
|
||||||
DecodeVisitor(HLADecodeStream& stream, HLAPropertyReference& propertyReference) :
|
DecodeVisitor(HLADecodeStream& stream, SGPropertyNode& propertyNode) :
|
||||||
HLADataTypeDecodeVisitor(stream),
|
HLADataTypeDecodeVisitor(stream),
|
||||||
_propertyReference(propertyReference)
|
_propertyNode(propertyNode)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void apply(const HLAInt8DataType& dataType)
|
virtual void apply(const HLAInt8DataType& dataType)
|
||||||
{
|
{
|
||||||
int8_t value = 0;
|
int8_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setIntValue(value);
|
_propertyNode.setIntValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt8DataType& dataType)
|
virtual void apply(const HLAUInt8DataType& dataType)
|
||||||
{
|
{
|
||||||
uint8_t value = 0;
|
uint8_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setIntValue(value);
|
_propertyNode.setIntValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAInt16DataType& dataType)
|
virtual void apply(const HLAInt16DataType& dataType)
|
||||||
{
|
{
|
||||||
int16_t value = 0;
|
int16_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setIntValue(value);
|
_propertyNode.setIntValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt16DataType& dataType)
|
virtual void apply(const HLAUInt16DataType& dataType)
|
||||||
{
|
{
|
||||||
uint16_t value = 0;
|
uint16_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setIntValue(value);
|
_propertyNode.setIntValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAInt32DataType& dataType)
|
virtual void apply(const HLAInt32DataType& dataType)
|
||||||
{
|
{
|
||||||
int32_t value = 0;
|
int32_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setIntValue(value);
|
_propertyNode.setIntValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt32DataType& dataType)
|
virtual void apply(const HLAUInt32DataType& dataType)
|
||||||
{
|
{
|
||||||
uint32_t value = 0;
|
uint32_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setIntValue(value);
|
_propertyNode.setIntValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAInt64DataType& dataType)
|
virtual void apply(const HLAInt64DataType& dataType)
|
||||||
{
|
{
|
||||||
int64_t value = 0;
|
int64_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setLongValue(value);
|
_propertyNode.setLongValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt64DataType& dataType)
|
virtual void apply(const HLAUInt64DataType& dataType)
|
||||||
{
|
{
|
||||||
uint64_t value = 0;
|
uint64_t value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setLongValue(value);
|
_propertyNode.setLongValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAFloat32DataType& dataType)
|
virtual void apply(const HLAFloat32DataType& dataType)
|
||||||
{
|
{
|
||||||
float value = 0;
|
float value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setFloatValue(value);
|
_propertyNode.setFloatValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAFloat64DataType& dataType)
|
virtual void apply(const HLAFloat64DataType& dataType)
|
||||||
{
|
{
|
||||||
double value = 0;
|
double value = 0;
|
||||||
dataType.decode(_stream, value);
|
dataType.decode(_stream, value);
|
||||||
_propertyReference.setDoubleValue(value);
|
_propertyNode.setDoubleValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void apply(const HLAFixedArrayDataType& dataType)
|
virtual void apply(const HLAFixedArrayDataType& dataType)
|
||||||
@ -99,7 +99,7 @@ public:
|
|||||||
dataType.getElementDataType()->accept(visitor);
|
dataType.getElementDataType()->accept(visitor);
|
||||||
value.push_back(visitor.getValue());
|
value.push_back(visitor.getValue());
|
||||||
}
|
}
|
||||||
_propertyReference.setStringValue(value);
|
_propertyNode.setStringValue(value);
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAVariableArrayDataType& dataType)
|
virtual void apply(const HLAVariableArrayDataType& dataType)
|
||||||
{
|
{
|
||||||
@ -113,65 +113,65 @@ public:
|
|||||||
dataType.getElementDataType()->accept(visitor);
|
dataType.getElementDataType()->accept(visitor);
|
||||||
value.push_back(visitor.getValue());
|
value.push_back(visitor.getValue());
|
||||||
}
|
}
|
||||||
_propertyReference.setStringValue(value);
|
_propertyNode.setStringValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HLAPropertyReference& _propertyReference;
|
SGPropertyNode& _propertyNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
class HLAPropertyDataElement::EncodeVisitor : public HLADataTypeEncodeVisitor {
|
class HLAPropertyDataElement::EncodeVisitor : public HLADataTypeEncodeVisitor {
|
||||||
public:
|
public:
|
||||||
EncodeVisitor(HLAEncodeStream& stream, const HLAPropertyReference& propertyReference) :
|
EncodeVisitor(HLAEncodeStream& stream, const SGPropertyNode& propertyNode) :
|
||||||
HLADataTypeEncodeVisitor(stream),
|
HLADataTypeEncodeVisitor(stream),
|
||||||
_propertyReference(propertyReference)
|
_propertyNode(propertyNode)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void apply(const HLAInt8DataType& dataType)
|
virtual void apply(const HLAInt8DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getIntValue());
|
dataType.encode(_stream, _propertyNode.getIntValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt8DataType& dataType)
|
virtual void apply(const HLAUInt8DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getIntValue());
|
dataType.encode(_stream, _propertyNode.getIntValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAInt16DataType& dataType)
|
virtual void apply(const HLAInt16DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getIntValue());
|
dataType.encode(_stream, _propertyNode.getIntValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt16DataType& dataType)
|
virtual void apply(const HLAUInt16DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getIntValue());
|
dataType.encode(_stream, _propertyNode.getIntValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAInt32DataType& dataType)
|
virtual void apply(const HLAInt32DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getIntValue());
|
dataType.encode(_stream, _propertyNode.getIntValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt32DataType& dataType)
|
virtual void apply(const HLAUInt32DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getIntValue());
|
dataType.encode(_stream, _propertyNode.getIntValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAInt64DataType& dataType)
|
virtual void apply(const HLAInt64DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getLongValue());
|
dataType.encode(_stream, _propertyNode.getLongValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAUInt64DataType& dataType)
|
virtual void apply(const HLAUInt64DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getLongValue());
|
dataType.encode(_stream, _propertyNode.getLongValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAFloat32DataType& dataType)
|
virtual void apply(const HLAFloat32DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getFloatValue());
|
dataType.encode(_stream, _propertyNode.getFloatValue());
|
||||||
}
|
}
|
||||||
virtual void apply(const HLAFloat64DataType& dataType)
|
virtual void apply(const HLAFloat64DataType& dataType)
|
||||||
{
|
{
|
||||||
dataType.encode(_stream, _propertyReference.getDoubleValue());
|
dataType.encode(_stream, _propertyNode.getDoubleValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void apply(const HLAFixedArrayDataType& dataType)
|
virtual void apply(const HLAFixedArrayDataType& dataType)
|
||||||
{
|
{
|
||||||
unsigned numElements = dataType.getNumElements();
|
unsigned numElements = dataType.getNumElements();
|
||||||
std::string value = _propertyReference.getStringValue();
|
std::string value = _propertyNode.getStringValue();
|
||||||
for (unsigned i = 0; i < numElements; ++i) {
|
for (unsigned i = 0; i < numElements; ++i) {
|
||||||
if (i < value.size()) {
|
if (i < value.size()) {
|
||||||
HLATemplateEncodeVisitor<char> visitor(_stream, value[i]);
|
HLATemplateEncodeVisitor<char> visitor(_stream, value[i]);
|
||||||
@ -185,7 +185,7 @@ public:
|
|||||||
|
|
||||||
virtual void apply(const HLAVariableArrayDataType& dataType)
|
virtual void apply(const HLAVariableArrayDataType& dataType)
|
||||||
{
|
{
|
||||||
std::string value = _propertyReference.getStringValue();
|
std::string value = _propertyNode.getStringValue();
|
||||||
HLATemplateEncodeVisitor<std::string::size_type> numElementsVisitor(_stream, value.size());
|
HLATemplateEncodeVisitor<std::string::size_type> numElementsVisitor(_stream, value.size());
|
||||||
dataType.getSizeDataType()->accept(numElementsVisitor);
|
dataType.getSizeDataType()->accept(numElementsVisitor);
|
||||||
for (unsigned i = 0; i < value.size(); ++i) {
|
for (unsigned i = 0; i < value.size(); ++i) {
|
||||||
@ -195,7 +195,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const HLAPropertyReference& _propertyReference;
|
const SGPropertyNode& _propertyNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
HLAPropertyDataElement::HLAPropertyDataElement(HLAPropertyReference* propertyReference) :
|
HLAPropertyDataElement::HLAPropertyDataElement(HLAPropertyReference* propertyReference) :
|
||||||
@ -203,12 +203,27 @@ HLAPropertyDataElement::HLAPropertyDataElement(HLAPropertyReference* propertyRef
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
HLAPropertyDataElement::HLAPropertyDataElement(const simgear::HLADataType* dataType, HLAPropertyReference* propertyReference) :
|
HLAPropertyDataElement::HLAPropertyDataElement(const HLADataType* dataType, HLAPropertyReference* propertyReference) :
|
||||||
_dataType(dataType),
|
_dataType(dataType),
|
||||||
_propertyReference(propertyReference)
|
_propertyReference(propertyReference)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HLAPropertyDataElement::HLAPropertyDataElement()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
HLAPropertyDataElement::HLAPropertyDataElement(SGPropertyNode* propertyNode)
|
||||||
|
{
|
||||||
|
setPropertyNode(propertyNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
HLAPropertyDataElement::HLAPropertyDataElement(const HLADataType* dataType, SGPropertyNode* propertyNode) :
|
||||||
|
_dataType(dataType)
|
||||||
|
{
|
||||||
|
setPropertyNode(propertyNode);
|
||||||
|
}
|
||||||
|
|
||||||
HLAPropertyDataElement::~HLAPropertyDataElement()
|
HLAPropertyDataElement::~HLAPropertyDataElement()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -218,8 +233,8 @@ HLAPropertyDataElement::encode(HLAEncodeStream& stream) const
|
|||||||
{
|
{
|
||||||
if (!_dataType.valid())
|
if (!_dataType.valid())
|
||||||
return false;
|
return false;
|
||||||
if (_propertyReference.valid()) {
|
if (const SGPropertyNode* propertyNode = getPropertyNode()) {
|
||||||
EncodeVisitor visitor(stream, *_propertyReference);
|
EncodeVisitor visitor(stream, *propertyNode);
|
||||||
_dataType->accept(visitor);
|
_dataType->accept(visitor);
|
||||||
} else {
|
} else {
|
||||||
HLADataTypeEncodeVisitor visitor(stream);
|
HLADataTypeEncodeVisitor visitor(stream);
|
||||||
@ -233,8 +248,8 @@ HLAPropertyDataElement::decode(HLADecodeStream& stream)
|
|||||||
{
|
{
|
||||||
if (!_dataType.valid())
|
if (!_dataType.valid())
|
||||||
return false;
|
return false;
|
||||||
if (_propertyReference.valid()) {
|
if (SGPropertyNode* propertyNode = getPropertyNode()) {
|
||||||
DecodeVisitor visitor(stream, *_propertyReference);
|
DecodeVisitor visitor(stream, *propertyNode);
|
||||||
_dataType->accept(visitor);
|
_dataType->accept(visitor);
|
||||||
} else {
|
} else {
|
||||||
HLADataTypeDecodeVisitor visitor(stream);
|
HLADataTypeDecodeVisitor visitor(stream);
|
||||||
@ -266,4 +281,27 @@ HLAPropertyDataElement::setDataType(const HLADataType* dataType)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
HLAPropertyDataElement::setPropertyNode(SGPropertyNode* propertyNode)
|
||||||
|
{
|
||||||
|
_propertyReference = new HLAPropertyReference;
|
||||||
|
_propertyReference->setRootNode(propertyNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
SGPropertyNode*
|
||||||
|
HLAPropertyDataElement::getPropertyNode()
|
||||||
|
{
|
||||||
|
if (!_propertyReference.valid())
|
||||||
|
return 0;
|
||||||
|
return _propertyReference->getPropertyNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
const SGPropertyNode*
|
||||||
|
HLAPropertyDataElement::getPropertyNode() const
|
||||||
|
{
|
||||||
|
if (!_propertyReference.valid())
|
||||||
|
return 0;
|
||||||
|
return _propertyReference->getPropertyNode();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace simgear
|
} // namespace simgear
|
||||||
|
@ -32,71 +32,6 @@ public:
|
|||||||
_relativePath(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()
|
SGPropertyNode* getPropertyNode()
|
||||||
{ return _propertyNode.get(); }
|
{ return _propertyNode.get(); }
|
||||||
|
|
||||||
@ -150,7 +85,10 @@ private:
|
|||||||
class HLAPropertyDataElement : public HLADataElement {
|
class HLAPropertyDataElement : public HLADataElement {
|
||||||
public:
|
public:
|
||||||
HLAPropertyDataElement(HLAPropertyReference* propertyReference);
|
HLAPropertyDataElement(HLAPropertyReference* propertyReference);
|
||||||
HLAPropertyDataElement(const simgear::HLADataType* dataType, HLAPropertyReference* propertyReference);
|
HLAPropertyDataElement(const HLADataType* dataType, HLAPropertyReference* propertyReference);
|
||||||
|
HLAPropertyDataElement();
|
||||||
|
HLAPropertyDataElement(SGPropertyNode* propertyNode);
|
||||||
|
HLAPropertyDataElement(const HLADataType* dataType, SGPropertyNode* propertyNode);
|
||||||
virtual ~HLAPropertyDataElement();
|
virtual ~HLAPropertyDataElement();
|
||||||
|
|
||||||
virtual bool encode(HLAEncodeStream& stream) const;
|
virtual bool encode(HLAEncodeStream& stream) const;
|
||||||
@ -159,6 +97,10 @@ public:
|
|||||||
virtual const HLADataType* getDataType() const;
|
virtual const HLADataType* getDataType() const;
|
||||||
virtual bool setDataType(const HLADataType* dataType);
|
virtual bool setDataType(const HLADataType* dataType);
|
||||||
|
|
||||||
|
void setPropertyNode(SGPropertyNode* propertyNode);
|
||||||
|
SGPropertyNode* getPropertyNode();
|
||||||
|
const SGPropertyNode* getPropertyNode() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class DecodeVisitor;
|
class DecodeVisitor;
|
||||||
class EncodeVisitor;
|
class EncodeVisitor;
|
||||||
|
Loading…
Reference in New Issue
Block a user