hla: rename HLAVariantData* to HLAVariantRecordData*

Rename to the true name that is used in the standard.
This commit is contained in:
Mathias Froehlich
2012-02-18 11:44:00 +01:00
parent 42cc699263
commit dc9163f801
18 changed files with 327 additions and 263 deletions
+4 -2
View File
@@ -24,6 +24,8 @@ set(HLA_HEADERS
HLARawDataElement.hxx
HLAVariantDataElement.hxx
HLAVariantDataType.hxx
HLAVariantRecordDataElement.hxx
HLAVariantRecordDataType.hxx
)
set(HLA_SOURCES
@@ -44,8 +46,8 @@ set(HLA_SOURCES
HLAOMTXmlVisitor.cxx
HLAPropertyDataElement.cxx
HLARawDataElement.cxx
HLAVariantDataElement.cxx
HLAVariantDataType.cxx
HLAVariantRecordDataElement.cxx
HLAVariantRecordDataType.cxx
)
simgear_component(hla hla "${HLA_SOURCES}" "${HLA_HEADERS}")
+14 -14
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -213,8 +213,8 @@ HLAVariantArrayDataElement::setDataType(const HLADataType* dataType)
SG_LOG(SG_NETWORK, SG_WARN, "HLAVariantArrayDataType: unable to set data type, dataType is not an array data type!");
return false;
}
const HLAVariantDataType* variantDataType = arrayDataType->getElementDataType()->toVariantDataType();
if (!variantDataType) {
const HLAVariantRecordDataType* variantRecordDataType = arrayDataType->getElementDataType()->toVariantRecordDataType();
if (!variantRecordDataType) {
SG_LOG(SG_NETWORK, SG_WARN, "HLAVariantArrayDataType: unable to set data type: arrayDataTypes element data type is no a variant data type!");
return false;
}
@@ -237,7 +237,7 @@ HLAVariantArrayDataElement::setNumElements(unsigned size)
bool
HLAVariantArrayDataElement::decodeElement(HLADecodeStream& stream, unsigned i)
{
HLAVariantDataElement* dataElement = getElement(i);
HLAVariantRecordDataElement* dataElement = getElement(i);
if (!dataElement)
return false;
return dataElement->decode(stream);
@@ -258,7 +258,7 @@ HLAVariantArrayDataElement::encodeElement(HLAEncodeStream& stream, unsigned i) c
return dataElement->encode(stream);
}
const HLAVariantDataElement*
const HLAVariantRecordDataElement*
HLAVariantArrayDataElement::getElement(unsigned index) const
{
if (_elementVector.size() <= index)
@@ -266,7 +266,7 @@ HLAVariantArrayDataElement::getElement(unsigned index) const
return _elementVector[index].get();
}
HLAVariantDataElement*
HLAVariantRecordDataElement*
HLAVariantArrayDataElement::getElement(unsigned index)
{
if (_elementVector.size() <= index)
@@ -274,7 +274,7 @@ HLAVariantArrayDataElement::getElement(unsigned index)
return _elementVector[index].get();
}
HLAVariantDataElement*
HLAVariantRecordDataElement*
HLAVariantArrayDataElement::getOrCreateElement(unsigned index)
{
if (_elementVector.size() <= index)
@@ -284,7 +284,7 @@ HLAVariantArrayDataElement::getOrCreateElement(unsigned index)
}
void
HLAVariantArrayDataElement::setElement(unsigned index, HLAVariantDataElement* value)
HLAVariantArrayDataElement::setElement(unsigned index, HLAVariantRecordDataElement* value)
{
unsigned oldSize = _elementVector.size();
if (oldSize <= index) {
@@ -307,7 +307,7 @@ HLAVariantArrayDataElement::getAlternativeDataElementFactory()
return _alternativeDataElementFactory.get();
}
HLAVariantDataElement*
HLAVariantRecordDataElement*
HLAVariantArrayDataElement::newElement()
{
const HLAArrayDataType* arrayDataType = getDataType();
@@ -316,12 +316,12 @@ HLAVariantArrayDataElement::newElement()
const HLADataType* elementDataType = arrayDataType->getElementDataType();
if (!elementDataType)
return 0;
const HLAVariantDataType* variantDataType = elementDataType->toVariantDataType();
if (!variantDataType)
const HLAVariantRecordDataType* variantRecordDataType = elementDataType->toVariantRecordDataType();
if (!variantRecordDataType)
return 0;
HLAVariantDataElement* variantDataElement = new HLAVariantDataElement(variantDataType);
variantDataElement->setDataElementFactory(_alternativeDataElementFactory.get());
return variantDataElement;
HLAVariantRecordDataElement* variantRecordDataElement = new HLAVariantRecordDataElement(variantRecordDataType);
variantRecordDataElement->setDataElementFactory(_alternativeDataElementFactory.get());
return variantRecordDataElement;
}
}
+9 -9
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -23,7 +23,7 @@
#include <simgear/math/SGMath.hxx>
#include "HLAArrayDataType.hxx"
#include "HLADataElement.hxx"
#include "HLAVariantDataElement.hxx"
#include "HLAVariantRecordDataElement.hxx"
#include "HLADataTypeVisitor.hxx"
namespace simgear {
@@ -102,20 +102,20 @@ public:
virtual unsigned getNumElements() const;
virtual bool encodeElement(HLAEncodeStream& stream, unsigned i) const;
const HLAVariantDataElement* getElement(unsigned index) const;
HLAVariantDataElement* getElement(unsigned index);
HLAVariantDataElement* getOrCreateElement(unsigned index);
void setElement(unsigned index, HLAVariantDataElement* value);
const HLAVariantRecordDataElement* getElement(unsigned index) const;
HLAVariantRecordDataElement* getElement(unsigned index);
HLAVariantRecordDataElement* getOrCreateElement(unsigned index);
void setElement(unsigned index, HLAVariantRecordDataElement* value);
typedef HLAVariantDataElement::DataElementFactory AlternativeDataElementFactory;
typedef HLAVariantRecordDataElement::DataElementFactory AlternativeDataElementFactory;
void setAlternativeDataElementFactory(AlternativeDataElementFactory* alternativeDataElementFactory);
AlternativeDataElementFactory* getAlternativeDataElementFactory();
private:
HLAVariantDataElement* newElement();
HLAVariantRecordDataElement* newElement();
typedef std::vector<SGSharedPtr<HLAVariantDataElement> > ElementVector;
typedef std::vector<SGSharedPtr<HLAVariantRecordDataElement> > ElementVector;
ElementVector _elementVector;
SGSharedPtr<AlternativeDataElementFactory> _alternativeDataElementFactory;
+4 -4
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -24,7 +24,7 @@ class HLABasicDataElement;
class HLAAbstractEnumeratedDataElement;
class HLAAbstractFixedRecordDataElement;
class HLAAbstractArrayDataElement;
class HLAAbstractVariantDataElement;
class HLAAbstractVariantRecordDataElement;
class HLADataElementVisitor {
public:
@@ -36,7 +36,7 @@ public:
virtual void apply(HLAAbstractEnumeratedDataElement&);
virtual void apply(HLAAbstractArrayDataElement&);
virtual void apply(HLAAbstractFixedRecordDataElement&);
virtual void apply(HLAAbstractVariantDataElement&);
virtual void apply(HLAAbstractVariantRecordDataElement&);
};
class HLAConstDataElementVisitor {
@@ -49,7 +49,7 @@ public:
virtual void apply(const HLAAbstractEnumeratedDataElement&);
virtual void apply(const HLAAbstractArrayDataElement&);
virtual void apply(const HLAAbstractFixedRecordDataElement&);
virtual void apply(const HLAAbstractVariantDataElement&);
virtual void apply(const HLAAbstractVariantRecordDataElement&);
};
}
+3 -3
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -69,8 +69,8 @@ HLADataType::toFixedRecordDataType() const
return 0;
}
const HLAVariantDataType*
HLADataType::toVariantDataType() const
const HLAVariantRecordDataType*
HLADataType::toVariantRecordDataType() const
{
return 0;
}
+4 -2
View File
@@ -32,7 +32,7 @@ class HLABasicDataType;
class HLAArrayDataType;
class HLAEnumeratedDataType;
class HLAFixedRecordDataType;
class HLAVariantDataType;
class HLAVariantRecordDataType;
enum HLAUpdateType {
HLAStaticUpdate,
@@ -63,7 +63,9 @@ public:
virtual const HLAArrayDataType* toArrayDataType() const;
virtual const HLAEnumeratedDataType* toEnumeratedDataType() const;
virtual const HLAFixedRecordDataType* toFixedRecordDataType() const;
virtual const HLAVariantDataType* toVariantDataType() const;
/// deprecated
const HLAVariantRecordDataType* toVariantDataType() const { return toVariantRecordDataType(); }
virtual const HLAVariantRecordDataType* toVariantRecordDataType() const;
protected:
HLADataType(const std::string& name, unsigned alignment = 1);
+10 -10
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -22,7 +22,7 @@
#include "HLADataTypeVisitor.hxx"
#include "HLAEnumeratedDataElement.hxx"
#include "HLAFixedRecordDataElement.hxx"
#include "HLAVariantDataElement.hxx"
#include "HLAVariantRecordDataElement.hxx"
namespace simgear {
@@ -160,11 +160,11 @@ HLADataElementFactoryVisitor::apply(const HLAFixedRecordDataType& dataType)
_dataElement = recordDataElement;
}
class HLADataElementFactoryVisitor::VariantDataElementFactory : public HLAVariantDataElement::DataElementFactory {
class HLADataElementFactoryVisitor::VariantRecordDataElementFactory : public HLAVariantRecordDataElement::DataElementFactory {
public:
virtual HLADataElement* createElement(const HLAVariantDataElement& element, unsigned index)
virtual HLADataElement* createElement(const HLAVariantRecordDataElement& element, unsigned index)
{
const HLAVariantDataType* dataType = element.getDataType();
const HLAVariantRecordDataType* dataType = element.getDataType();
if (!dataType)
return 0;
const HLADataType* alternativeDataType = element.getAlternativeDataType();
@@ -177,12 +177,12 @@ public:
};
void
HLADataElementFactoryVisitor::apply(const HLAVariantDataType& dataType)
HLADataElementFactoryVisitor::apply(const HLAVariantRecordDataType& dataType)
{
SGSharedPtr<HLAVariantDataElement> variantDataElement;
variantDataElement = new HLAVariantDataElement(&dataType);
variantDataElement->setDataElementFactory(new VariantDataElementFactory);
_dataElement = variantDataElement;
SGSharedPtr<HLAVariantRecordDataElement> variantRecordDataElement;
variantRecordDataElement = new HLAVariantRecordDataElement(&dataType);
variantRecordDataElement->setDataElementFactory(new VariantRecordDataElementFactory);
_dataElement = variantRecordDataElement;
}
} // namespace simgear
+12 -12
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -27,7 +27,7 @@
#include "HLADataElement.hxx"
#include "HLAEnumeratedDataType.hxx"
#include "HLAFixedRecordDataType.hxx"
#include "HLAVariantDataType.hxx"
#include "HLAVariantRecordDataType.hxx"
namespace simgear {
@@ -84,7 +84,7 @@ public:
virtual void apply(const HLAFixedRecordDataType& dataType)
{ apply(static_cast<const HLADataType&>(dataType)); }
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{ apply(static_cast<const HLADataType&>(dataType)); }
};
@@ -145,7 +145,7 @@ public:
}
}
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{ assert(0); }
protected:
@@ -188,7 +188,7 @@ public:
dataType.getFieldDataType(i)->accept(*this);
}
virtual void apply(const HLAVariantDataType& dataType) { assert(0); }
virtual void apply(const HLAVariantRecordDataType& dataType) { assert(0); }
protected:
HLADecodeStream& _stream;
@@ -232,7 +232,7 @@ public:
dataType.getFieldDataType(i)->accept(*this);
}
virtual void apply(const HLAVariantDataType& dataType) { assert(0); }
virtual void apply(const HLAVariantRecordDataType& dataType) { assert(0); }
protected:
HLAEncodeStream& _stream;
@@ -269,7 +269,7 @@ public:
HLADataTypeDecodeVisitor::apply(dataType);
}
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{
SG_LOG(SG_NETWORK, SG_WARN, "Unexpected HLADataType while decodeing scalar value");
HLADataTypeDecodeVisitor::apply(dataType);
@@ -305,7 +305,7 @@ public:
HLADataTypeEncodeVisitor::apply(dataType);
}
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{
SG_LOG(SG_NETWORK, SG_WARN, "Unexpected HLADataType while writing scalar value");
HLADataTypeEncodeVisitor::apply(dataType);
@@ -386,7 +386,7 @@ public:
HLADataTypeDecodeVisitor::apply(dataType);
}
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{
SG_LOG(SG_NETWORK, SG_WARN, "Unexpected HLADataType while decodeing a fixed record value");
HLADataTypeDecodeVisitor::apply(dataType);
@@ -467,7 +467,7 @@ public:
HLADataTypeEncodeVisitor::apply(dataType);
}
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{
SG_LOG(SG_NETWORK, SG_WARN, "Unexpected HLADataType while writing a fixed record value");
HLADataTypeEncodeVisitor::apply(dataType);
@@ -654,14 +654,14 @@ public:
virtual void apply(const HLAFixedRecordDataType& dataType);
virtual void apply(const HLAVariantDataType& dataType);
virtual void apply(const HLAVariantRecordDataType& dataType);
HLADataElement* getDataElement()
{ return _dataElement.release(); }
protected:
class ArrayDataElementFactory;
class VariantDataElementFactory;
class VariantRecordDataElementFactory;
SGSharedPtr<HLADataElement> _dataElement;
};
+6 -6
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -28,7 +28,7 @@
#include "HLADataTypeVisitor.hxx"
#include "HLAEnumeratedDataType.hxx"
#include "HLAFixedRecordDataType.hxx"
#include "HLAVariantDataType.hxx"
#include "HLAVariantRecordDataType.hxx"
namespace simgear {
@@ -287,7 +287,7 @@ HLAOMTXmlVisitor::getDataType(const std::string& dataTypeName, HLAOMTXmlVisitor:
if (dataType.valid())
return dataType;
dataType = getVariantDataType(dataTypeName, dataTypeMap);
dataType = getVariantRecordDataType(dataTypeName, dataTypeMap);
if (dataType.valid())
return dataType;
@@ -473,13 +473,13 @@ HLAOMTXmlVisitor::getFixedRecordDataType(const std::string& dataTypeName, HLAOMT
return dataType;
}
SGSharedPtr<HLAVariantDataType>
HLAOMTXmlVisitor::getVariantDataType(const std::string& dataTypeName, HLAOMTXmlVisitor::StringDataTypeMap& dataTypeMap) const
SGSharedPtr<HLAVariantRecordDataType>
HLAOMTXmlVisitor::getVariantRecordDataType(const std::string& dataTypeName, HLAOMTXmlVisitor::StringDataTypeMap& dataTypeMap) const
{
VariantRecordDataMap::const_iterator i = _variantRecordDataMap.find(dataTypeName);
if (i == _variantRecordDataMap.end())
return 0;
SGSharedPtr<HLAVariantDataType> dataType = new HLAVariantDataType(dataTypeName);
SGSharedPtr<HLAVariantRecordDataType> dataType = new HLAVariantRecordDataType(dataTypeName);
dataTypeMap[dataTypeName] = dataType;
SGSharedPtr<HLAEnumeratedDataType> enumeratedDataType = getEnumeratedDataType(i->second._dataType);
+2 -2
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -153,7 +153,7 @@ private:
SGSharedPtr<HLAEnumeratedDataType> getEnumeratedDataType(const std::string& dataTypeName) const;
SGSharedPtr<HLADataType> getArrayDataType(const std::string& dataTypeName, StringDataTypeMap& dataTypeMap) const;
SGSharedPtr<HLAFixedRecordDataType> getFixedRecordDataType(const std::string& dataTypeName, StringDataTypeMap& dataTypeMap) const;
SGSharedPtr<HLAVariantDataType> getVariantDataType(const std::string& dataTypeName, StringDataTypeMap& dataTypeMap) const;
SGSharedPtr<HLAVariantRecordDataType> getVariantRecordDataType(const std::string& dataTypeName, StringDataTypeMap& dataTypeMap) const;
enum Mode {
UnknownMode,
+11 -11
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -24,7 +24,7 @@
#include "HLAEnumeratedDataElement.hxx"
#include "HLAFixedRecordDataElement.hxx"
#include "HLAObjectClass.hxx"
#include "HLAVariantDataElement.hxx"
#include "HLAVariantRecordDataElement.hxx"
#include "RTIObjectClass.hxx"
#include "RTIObjectInstance.hxx"
@@ -312,9 +312,9 @@ public:
_dataElement = recordDataElement;
}
class VariantDataElementFactory : public HLAVariantDataElement::DataElementFactory {
class VariantRecordDataElementFactory : public HLAVariantRecordDataElement::DataElementFactory {
public:
VariantDataElementFactory(const HLADataElement::Path& path, const HLAPathElementMap& pathElementMap) :
VariantRecordDataElementFactory(const HLADataElement::Path& path, const HLAPathElementMap& pathElementMap) :
_path(path)
{
for (HLAPathElementMap::const_iterator i = pathElementMap.lower_bound(path);
@@ -325,9 +325,9 @@ public:
_pathElementMap.insert(*i);
}
}
virtual HLADataElement* createElement(const HLAVariantDataElement& element, unsigned index)
virtual HLADataElement* createElement(const HLAVariantRecordDataElement& element, unsigned index)
{
const HLAVariantDataType* dataType = element.getDataType();
const HLAVariantRecordDataType* dataType = element.getDataType();
if (!dataType)
return 0;
const HLADataType* alternativeDataType = element.getAlternativeDataType();
@@ -344,17 +344,17 @@ public:
HLAPathElementMap _pathElementMap;
};
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{
_dataElement = createDataElement(_path, dataType);
if (_dataElement.valid())
return;
SGSharedPtr<HLAVariantDataElement> variantDataElement;
variantDataElement = new HLAVariantDataElement(&dataType);
variantDataElement->setDataElementFactory(new VariantDataElementFactory(_path, _pathElementMap));
SGSharedPtr<HLAVariantRecordDataElement> variantRecordDataElement;
variantRecordDataElement = new HLAVariantRecordDataElement(&dataType);
variantRecordDataElement->setDataElementFactory(new VariantRecordDataElementFactory(_path, _pathElementMap));
_dataElement = variantDataElement;
_dataElement = variantRecordDataElement;
}
private:
+11 -11
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -22,7 +22,7 @@
#include "HLADataElementVisitor.hxx"
#include "HLADataTypeVisitor.hxx"
#include "HLAFixedRecordDataElement.hxx"
#include "HLAVariantDataElement.hxx"
#include "HLAVariantRecordDataElement.hxx"
namespace simgear {
@@ -373,14 +373,14 @@ public:
_dataElement = recordDataElement;
}
class VariantDataElementFactory : public HLAVariantDataElement::DataElementFactory {
class VariantRecordDataElementFactory : public HLAVariantRecordDataElement::DataElementFactory {
public:
VariantDataElementFactory(SGPropertyNode* propertyNode) :
VariantRecordDataElementFactory(SGPropertyNode* propertyNode) :
_propertyNode(propertyNode)
{ }
virtual HLADataElement* createElement(const HLAVariantDataElement& element, unsigned index)
virtual HLADataElement* createElement(const HLAVariantRecordDataElement& element, unsigned index)
{
const HLAVariantDataType* dataType = element.getDataType();
const HLAVariantRecordDataType* dataType = element.getDataType();
if (!dataType)
return 0;
const HLADataType* alternativeDataType = element.getAlternativeDataType();
@@ -394,12 +394,12 @@ public:
SGSharedPtr<SGPropertyNode> _propertyNode;
};
virtual void apply(const HLAVariantDataType& dataType)
virtual void apply(const HLAVariantRecordDataType& dataType)
{
SGSharedPtr<HLAVariantDataElement> variantDataElement;
variantDataElement = new HLAVariantDataElement(&dataType);
variantDataElement->setDataElementFactory(new VariantDataElementFactory(_propertyNode.get()));
_dataElement = variantDataElement;
SGSharedPtr<HLAVariantRecordDataElement> variantRecordDataElement;
variantRecordDataElement = new HLAVariantRecordDataElement(&dataType);
variantRecordDataElement->setDataElementFactory(new VariantRecordDataElementFactory(_propertyNode.get()));
_dataElement = variantRecordDataElement;
}
HLADataElement* getDataElement()
+4 -58
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -18,67 +18,13 @@
#ifndef HLAVariantDataElement_hxx
#define HLAVariantDataElement_hxx
#include <string>
#include <simgear/structure/SGSharedPtr.hxx>
#include "HLADataElement.hxx"
#include "HLAVariantDataType.hxx"
#include "HLAVariantRecordDataElement.hxx"
namespace simgear {
class HLAAbstractVariantDataElement : public HLADataElement {
public:
HLAAbstractVariantDataElement(const HLAVariantDataType* dataType);
virtual ~HLAAbstractVariantDataElement();
virtual void accept(HLADataElementVisitor& visitor);
virtual void accept(HLAConstDataElementVisitor& visitor) const;
virtual bool decode(HLADecodeStream& stream);
virtual bool encode(HLAEncodeStream& stream) const;
virtual const HLAVariantDataType* getDataType() const;
virtual bool setDataType(const HLADataType* dataType);
void setDataType(const HLAVariantDataType* dataType);
std::string getAlternativeName() const;
const HLADataType* getAlternativeDataType() const;
virtual bool setAlternativeIndex(unsigned index) = 0;
virtual bool decodeAlternative(HLADecodeStream& stream) = 0;
virtual unsigned getAlternativeIndex() const = 0;
virtual bool encodeAlternative(HLAEncodeStream& stream) const = 0;
private:
SGSharedPtr<const HLAVariantDataType> _dataType;
};
class HLAVariantDataElement : public HLAAbstractVariantDataElement {
public:
HLAVariantDataElement(const HLAVariantDataType* dataType);
virtual ~HLAVariantDataElement();
virtual bool setAlternativeIndex(unsigned index);
virtual bool decodeAlternative(HLADecodeStream& stream);
virtual unsigned getAlternativeIndex() const;
virtual bool encodeAlternative(HLAEncodeStream& stream) const;
class DataElementFactory : public SGReferenced {
public:
virtual ~DataElementFactory();
virtual HLADataElement* createElement(const HLAVariantDataElement&, unsigned) = 0;
};
void setDataElementFactory(DataElementFactory* dataElementFactory);
DataElementFactory* getDataElementFactory();
private:
HLADataElement* newElement(unsigned index);
SGSharedPtr<HLADataElement> _dataElement;
unsigned _alternativeIndex;
SGSharedPtr<DataElementFactory> _dataElementFactory;
};
typedef HLAAbstractVariantRecordDataElement HLAAbstractVariantDataElement;
typedef HLAVariantRecordDataElement HLAVariantDataElement;
}
+3 -76
View File
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -18,84 +18,11 @@
#ifndef HLAVariantDataType_hxx
#define HLAVariantDataType_hxx
#include <string>
#include <vector>
#include "simgear/structure/SGSharedPtr.hxx"
#include "HLADataType.hxx"
#include "HLAEnumeratedDataType.hxx"
#include "HLAVariantRecordDataType.hxx"
namespace simgear {
class HLAAbstractVariantDataElement;
class HLAVariantDataType : public HLADataType {
public:
HLAVariantDataType(const std::string& name = "HLAVariantDataType");
virtual ~HLAVariantDataType();
virtual void accept(HLADataTypeVisitor& visitor) const;
virtual const HLAVariantDataType* toVariantDataType() const;
virtual bool decode(HLADecodeStream& stream, HLAAbstractVariantDataElement& value) const;
virtual bool encode(HLAEncodeStream& stream, const HLAAbstractVariantDataElement& value) const;
const HLAEnumeratedDataType* getEnumeratedDataType() const
{ return _enumeratedDataType.get(); }
void setEnumeratedDataType(HLAEnumeratedDataType* dataType);
bool addAlternative(const std::string& name, const std::string& enumerator,
const HLADataType* dataType, const std::string& semantics);
unsigned getNumAlternatives() const
{ return _alternativeList.size(); }
unsigned getAlternativeIndex(const std::string& enumerator) const
{
if (!_enumeratedDataType.valid())
return ~unsigned(0);
return _enumeratedDataType->getIndex(enumerator);
}
const HLADataType* getAlternativeDataType(unsigned index) const
{
if (_alternativeList.size() <= index)
return 0;
return _alternativeList[index]._dataType.get();
}
const HLADataType* getAlternativeDataType(const std::string& enumerator) const
{ return getAlternativeDataType(getAlternativeIndex(enumerator)); }
std::string getAlternativeName(unsigned index) const
{
if (_alternativeList.size() <= index)
return std::string();
return _alternativeList[index]._name;
}
std::string getAlternativeName(const std::string& enumerator) const
{ return getAlternativeName(getAlternativeIndex(enumerator)); }
std::string getAlternativeSemantics(unsigned index) const
{
if (_alternativeList.size() <= index)
return std::string();
return _alternativeList[index]._semantics;
}
std::string getAlternativeSemantics(const std::string& enumerator) const
{ return getAlternativeSemantics(getAlternativeIndex(enumerator)); }
private:
SGSharedPtr<HLAEnumeratedDataType> _enumeratedDataType;
struct Alternative {
std::string _name;
SGSharedPtr<const HLADataType> _dataType;
std::string _semantics;
};
typedef std::vector<Alternative> AlternativeList;
AlternativeList _alternativeList;
};
typedef HLAVariantRecordDataType HLAVariantDataType;
} // namespace simgear
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -15,7 +15,7 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
#include "HLAVariantDataElement.hxx"
#include "HLAVariantRecordDataElement.hxx"
#include <simgear/debug/logstream.hxx>
@@ -23,29 +23,29 @@
namespace simgear {
HLAAbstractVariantDataElement::HLAAbstractVariantDataElement(const HLAVariantDataType* dataType) :
HLAAbstractVariantRecordDataElement::HLAAbstractVariantRecordDataElement(const HLAVariantRecordDataType* dataType) :
_dataType(dataType)
{
}
HLAAbstractVariantDataElement::~HLAAbstractVariantDataElement()
HLAAbstractVariantRecordDataElement::~HLAAbstractVariantRecordDataElement()
{
}
void
HLAAbstractVariantDataElement::accept(HLADataElementVisitor& visitor)
HLAAbstractVariantRecordDataElement::accept(HLADataElementVisitor& visitor)
{
visitor.apply(*this);
}
void
HLAAbstractVariantDataElement::accept(HLAConstDataElementVisitor& visitor) const
HLAAbstractVariantRecordDataElement::accept(HLAConstDataElementVisitor& visitor) const
{
visitor.apply(*this);
}
bool
HLAAbstractVariantDataElement::decode(HLADecodeStream& stream)
HLAAbstractVariantRecordDataElement::decode(HLADecodeStream& stream)
{
if (!_dataType.valid())
return false;
@@ -53,39 +53,39 @@ HLAAbstractVariantDataElement::decode(HLADecodeStream& stream)
}
bool
HLAAbstractVariantDataElement::encode(HLAEncodeStream& stream) const
HLAAbstractVariantRecordDataElement::encode(HLAEncodeStream& stream) const
{
if (!_dataType.valid())
return false;
return _dataType->encode(stream, *this);
}
const HLAVariantDataType*
HLAAbstractVariantDataElement::getDataType() const
const HLAVariantRecordDataType*
HLAAbstractVariantRecordDataElement::getDataType() const
{
return _dataType.get();
}
bool
HLAAbstractVariantDataElement::setDataType(const HLADataType* dataType)
HLAAbstractVariantRecordDataElement::setDataType(const HLADataType* dataType)
{
const HLAVariantDataType* variantDataType = dataType->toVariantDataType();
if (!variantDataType) {
SG_LOG(SG_NETWORK, SG_WARN, "HLAVariantDataType: unable to set data type!");
const HLAVariantRecordDataType* variantRecordDataType = dataType->toVariantRecordDataType();
if (!variantRecordDataType) {
SG_LOG(SG_NETWORK, SG_WARN, "HLAVariantRecordDataType: unable to set data type!");
return false;
}
setDataType(variantDataType);
setDataType(variantRecordDataType);
return true;
}
void
HLAAbstractVariantDataElement::setDataType(const HLAVariantDataType* dataType)
HLAAbstractVariantRecordDataElement::setDataType(const HLAVariantRecordDataType* dataType)
{
_dataType = dataType;
}
std::string
HLAAbstractVariantDataElement::getAlternativeName() const
HLAAbstractVariantRecordDataElement::getAlternativeName() const
{
if (!_dataType.valid())
return std::string();
@@ -93,7 +93,7 @@ HLAAbstractVariantDataElement::getAlternativeName() const
}
const HLADataType*
HLAAbstractVariantDataElement::getAlternativeDataType() const
HLAAbstractVariantRecordDataElement::getAlternativeDataType() const
{
if (!_dataType.valid())
return 0;
@@ -101,22 +101,22 @@ HLAAbstractVariantDataElement::getAlternativeDataType() const
}
HLAVariantDataElement::DataElementFactory::~DataElementFactory()
HLAVariantRecordDataElement::DataElementFactory::~DataElementFactory()
{
}
HLAVariantDataElement::HLAVariantDataElement(const HLAVariantDataType* dataType) :
HLAAbstractVariantDataElement(dataType),
HLAVariantRecordDataElement::HLAVariantRecordDataElement(const HLAVariantRecordDataType* dataType) :
HLAAbstractVariantRecordDataElement(dataType),
_alternativeIndex(~0u)
{
}
HLAVariantDataElement::~HLAVariantDataElement()
HLAVariantRecordDataElement::~HLAVariantRecordDataElement()
{
}
bool
HLAVariantDataElement::setAlternativeIndex(unsigned index)
HLAVariantRecordDataElement::setAlternativeIndex(unsigned index)
{
if (_alternativeIndex == index)
return true;
@@ -129,37 +129,37 @@ HLAVariantDataElement::setAlternativeIndex(unsigned index)
}
bool
HLAVariantDataElement::decodeAlternative(HLADecodeStream& stream)
HLAVariantRecordDataElement::decodeAlternative(HLADecodeStream& stream)
{
return _dataElement->decode(stream);
}
unsigned
HLAVariantDataElement::getAlternativeIndex() const
HLAVariantRecordDataElement::getAlternativeIndex() const
{
return _alternativeIndex;
}
bool
HLAVariantDataElement::encodeAlternative(HLAEncodeStream& stream) const
HLAVariantRecordDataElement::encodeAlternative(HLAEncodeStream& stream) const
{
return _dataElement->encode(stream);
}
void
HLAVariantDataElement::setDataElementFactory(HLAVariantDataElement::DataElementFactory* dataElementFactory)
HLAVariantRecordDataElement::setDataElementFactory(HLAVariantRecordDataElement::DataElementFactory* dataElementFactory)
{
_dataElementFactory = dataElementFactory;
}
HLAVariantDataElement::DataElementFactory*
HLAVariantDataElement::getDataElementFactory()
HLAVariantRecordDataElement::DataElementFactory*
HLAVariantRecordDataElement::getDataElementFactory()
{
return _dataElementFactory;
}
HLADataElement*
HLAVariantDataElement::newElement(unsigned index)
HLAVariantRecordDataElement::newElement(unsigned index)
{
if (!_dataElementFactory.valid())
return 0;
@@ -0,0 +1,85 @@
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
#ifndef HLAVariantRecordDataElement_hxx
#define HLAVariantRecordDataElement_hxx
#include <string>
#include <simgear/structure/SGSharedPtr.hxx>
#include "HLADataElement.hxx"
#include "HLAVariantRecordDataType.hxx"
namespace simgear {
class HLAAbstractVariantRecordDataElement : public HLADataElement {
public:
HLAAbstractVariantRecordDataElement(const HLAVariantRecordDataType* dataType);
virtual ~HLAAbstractVariantRecordDataElement();
virtual void accept(HLADataElementVisitor& visitor);
virtual void accept(HLAConstDataElementVisitor& visitor) const;
virtual bool decode(HLADecodeStream& stream);
virtual bool encode(HLAEncodeStream& stream) const;
virtual const HLAVariantRecordDataType* getDataType() const;
virtual bool setDataType(const HLADataType* dataType);
void setDataType(const HLAVariantRecordDataType* dataType);
std::string getAlternativeName() const;
const HLADataType* getAlternativeDataType() const;
virtual bool setAlternativeIndex(unsigned index) = 0;
virtual bool decodeAlternative(HLADecodeStream& stream) = 0;
virtual unsigned getAlternativeIndex() const = 0;
virtual bool encodeAlternative(HLAEncodeStream& stream) const = 0;
private:
SGSharedPtr<const HLAVariantRecordDataType> _dataType;
};
class HLAVariantRecordDataElement : public HLAAbstractVariantRecordDataElement {
public:
HLAVariantRecordDataElement(const HLAVariantRecordDataType* dataType);
virtual ~HLAVariantRecordDataElement();
virtual bool setAlternativeIndex(unsigned index);
virtual bool decodeAlternative(HLADecodeStream& stream);
virtual unsigned getAlternativeIndex() const;
virtual bool encodeAlternative(HLAEncodeStream& stream) const;
class DataElementFactory : public SGReferenced {
public:
virtual ~DataElementFactory();
virtual HLADataElement* createElement(const HLAVariantRecordDataElement&, unsigned) = 0;
};
void setDataElementFactory(DataElementFactory* dataElementFactory);
DataElementFactory* getDataElementFactory();
private:
HLADataElement* newElement(unsigned index);
SGSharedPtr<HLADataElement> _dataElement;
unsigned _alternativeIndex;
SGSharedPtr<DataElementFactory> _dataElementFactory;
};
}
#endif
@@ -1,4 +1,4 @@
// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@@ -15,36 +15,36 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
#include "HLAVariantDataType.hxx"
#include "HLAVariantRecordDataType.hxx"
#include "HLADataTypeVisitor.hxx"
#include "HLAVariantDataElement.hxx"
#include "HLAVariantRecordDataElement.hxx"
namespace simgear {
HLAVariantDataType::HLAVariantDataType(const std::string& name) :
HLAVariantRecordDataType::HLAVariantRecordDataType(const std::string& name) :
HLADataType(name)
{
}
HLAVariantDataType::~HLAVariantDataType()
HLAVariantRecordDataType::~HLAVariantRecordDataType()
{
}
void
HLAVariantDataType::accept(HLADataTypeVisitor& visitor) const
HLAVariantRecordDataType::accept(HLADataTypeVisitor& visitor) const
{
visitor.apply(*this);
}
const HLAVariantDataType*
HLAVariantDataType::toVariantDataType() const
const HLAVariantRecordDataType*
HLAVariantRecordDataType::toVariantRecordDataType() const
{
return this;
}
bool
HLAVariantDataType::decode(HLADecodeStream& stream, HLAAbstractVariantDataElement& value) const
HLAVariantRecordDataType::decode(HLADecodeStream& stream, HLAAbstractVariantRecordDataElement& value) const
{
if (!stream.alignOffsetForSize(getAlignment()))
return false;
@@ -61,7 +61,7 @@ HLAVariantDataType::decode(HLADecodeStream& stream, HLAAbstractVariantDataElemen
}
bool
HLAVariantDataType::encode(HLAEncodeStream& stream, const HLAAbstractVariantDataElement& value) const
HLAVariantRecordDataType::encode(HLAEncodeStream& stream, const HLAAbstractVariantRecordDataElement& value) const
{
if (!stream.alignOffsetForSize(getAlignment()))
return false;
@@ -76,14 +76,14 @@ HLAVariantDataType::encode(HLAEncodeStream& stream, const HLAAbstractVariantData
}
void
HLAVariantDataType::setEnumeratedDataType(HLAEnumeratedDataType* dataType)
HLAVariantRecordDataType::setEnumeratedDataType(HLAEnumeratedDataType* dataType)
{
_enumeratedDataType = dataType;
}
bool
HLAVariantDataType::addAlternative(const std::string& name, const std::string& enumerator,
const HLADataType* dataType, const std::string& semantics)
HLAVariantRecordDataType::addAlternative(const std::string& name, const std::string& enumerator,
const HLADataType* dataType, const std::string& semantics)
{
if (!_enumeratedDataType.valid())
return false;
+102
View File
@@ -0,0 +1,102 @@
// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
#ifndef HLAVariantRecordDataType_hxx
#define HLAVariantRecordDataType_hxx
#include <string>
#include <vector>
#include "simgear/structure/SGSharedPtr.hxx"
#include "HLADataType.hxx"
#include "HLAEnumeratedDataType.hxx"
namespace simgear {
class HLAAbstractVariantRecordDataElement;
class HLAVariantRecordDataType : public HLADataType {
public:
HLAVariantRecordDataType(const std::string& name = "HLAVariantRecordDataType");
virtual ~HLAVariantRecordDataType();
virtual void accept(HLADataTypeVisitor& visitor) const;
virtual const HLAVariantRecordDataType* toVariantRecordDataType() const;
virtual bool decode(HLADecodeStream& stream, HLAAbstractVariantRecordDataElement& value) const;
virtual bool encode(HLAEncodeStream& stream, const HLAAbstractVariantRecordDataElement& value) const;
const HLAEnumeratedDataType* getEnumeratedDataType() const
{ return _enumeratedDataType.get(); }
void setEnumeratedDataType(HLAEnumeratedDataType* dataType);
bool addAlternative(const std::string& name, const std::string& enumerator,
const HLADataType* dataType, const std::string& semantics);
unsigned getNumAlternatives() const
{ return _alternativeList.size(); }
unsigned getAlternativeIndex(const std::string& enumerator) const
{
if (!_enumeratedDataType.valid())
return ~unsigned(0);
return _enumeratedDataType->getIndex(enumerator);
}
const HLADataType* getAlternativeDataType(unsigned index) const
{
if (_alternativeList.size() <= index)
return 0;
return _alternativeList[index]._dataType.get();
}
const HLADataType* getAlternativeDataType(const std::string& enumerator) const
{ return getAlternativeDataType(getAlternativeIndex(enumerator)); }
std::string getAlternativeName(unsigned index) const
{
if (_alternativeList.size() <= index)
return std::string();
return _alternativeList[index]._name;
}
std::string getAlternativeName(const std::string& enumerator) const
{ return getAlternativeName(getAlternativeIndex(enumerator)); }
std::string getAlternativeSemantics(unsigned index) const
{
if (_alternativeList.size() <= index)
return std::string();
return _alternativeList[index]._semantics;
}
std::string getAlternativeSemantics(const std::string& enumerator) const
{ return getAlternativeSemantics(getAlternativeIndex(enumerator)); }
private:
SGSharedPtr<HLAEnumeratedDataType> _enumeratedDataType;
struct Alternative {
std::string _name;
SGSharedPtr<const HLADataType> _dataType;
std::string _semantics;
};
typedef std::vector<Alternative> AlternativeList;
AlternativeList _alternativeList;
};
} // namespace simgear
#endif