hla: Remove HLADataElement::Path based attribute handling.
This commit is contained in:
@@ -29,110 +29,6 @@
|
|||||||
|
|
||||||
namespace simgear {
|
namespace simgear {
|
||||||
|
|
||||||
HLADataElement::PathElement::Data::~Data()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const HLADataElement::PathElement::FieldData*
|
|
||||||
HLADataElement::PathElement::Data::toFieldData() const
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const HLADataElement::PathElement::IndexData*
|
|
||||||
HLADataElement::PathElement::Data::toIndexData() const
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::PathElement::FieldData::FieldData(const std::string& name) :
|
|
||||||
_name(name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::PathElement::FieldData::~FieldData()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const HLADataElement::PathElement::FieldData*
|
|
||||||
HLADataElement::PathElement::FieldData::toFieldData() const
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
HLADataElement::PathElement::FieldData::less(const Data* data) const
|
|
||||||
{
|
|
||||||
const FieldData* fieldData = data->toFieldData();
|
|
||||||
// IndexData is allways smaller than FieldData
|
|
||||||
if (!fieldData)
|
|
||||||
return false;
|
|
||||||
return _name < fieldData->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
HLADataElement::PathElement::FieldData::equal(const Data* data) const
|
|
||||||
{
|
|
||||||
const FieldData* fieldData = data->toFieldData();
|
|
||||||
// IndexData is allways smaller than FieldData
|
|
||||||
if (!fieldData)
|
|
||||||
return false;
|
|
||||||
return _name == fieldData->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
HLADataElement::PathElement::FieldData::append(std::string& s) const
|
|
||||||
{
|
|
||||||
s.append(1, std::string::value_type('.'));
|
|
||||||
s.append(_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::PathElement::IndexData::IndexData(unsigned index) :
|
|
||||||
_index(index)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::PathElement::IndexData::~IndexData()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const HLADataElement::PathElement::IndexData*
|
|
||||||
HLADataElement::PathElement::IndexData::toIndexData() const
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
HLADataElement::PathElement::IndexData::less(const Data* data) const
|
|
||||||
{
|
|
||||||
const IndexData* indexData = data->toIndexData();
|
|
||||||
// IndexData is allways smaller than FieldData
|
|
||||||
if (!indexData)
|
|
||||||
return true;
|
|
||||||
return _index < indexData->_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
HLADataElement::PathElement::IndexData::equal(const Data* data) const
|
|
||||||
{
|
|
||||||
const IndexData* indexData = data->toIndexData();
|
|
||||||
// IndexData is allways smaller than FieldData
|
|
||||||
if (!indexData)
|
|
||||||
return false;
|
|
||||||
return _index == indexData->_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
HLADataElement::PathElement::IndexData::append(std::string& s) const
|
|
||||||
{
|
|
||||||
s.append(1, std::string::value_type('['));
|
|
||||||
unsigned value = _index;
|
|
||||||
do {
|
|
||||||
s.append(1, std::string::value_type('0' + value % 10));
|
|
||||||
} while (value /= 10);
|
|
||||||
s.append(1, std::string::value_type(']'));
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::~HLADataElement()
|
HLADataElement::~HLADataElement()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -216,61 +112,6 @@ HLADataElement::accept(HLAConstDataElementVisitor& visitor) const
|
|||||||
visitor.apply(*this);
|
visitor.apply(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
|
||||||
HLADataElement::toString(const Path& path)
|
|
||||||
{
|
|
||||||
std::string s;
|
|
||||||
for (Path::const_iterator i = path.begin(); i != path.end(); ++i)
|
|
||||||
i->append(s);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::StringPathPair
|
|
||||||
HLADataElement::toStringPathPair(const std::string& s)
|
|
||||||
{
|
|
||||||
Path path;
|
|
||||||
// Skip the initial attribute/parameter name if given
|
|
||||||
std::string::size_type i = s.find_first_of("[.");
|
|
||||||
std::string attribute = s.substr(0, i);
|
|
||||||
while (i < s.size()) {
|
|
||||||
if (s[i] == '[') {
|
|
||||||
++i;
|
|
||||||
unsigned index = 0;
|
|
||||||
while (i < s.size()) {
|
|
||||||
if (s[i] == ']')
|
|
||||||
break;
|
|
||||||
unsigned v = s[i] - '0';
|
|
||||||
// Error, no number
|
|
||||||
if (10 <= v) {
|
|
||||||
SG_LOG(SG_NETWORK, SG_WARN, "HLADataElement: invalid character in array subscript for \""
|
|
||||||
<< s << "\" at \"" << attribute << toString(path) << "\"!");
|
|
||||||
return StringPathPair();
|
|
||||||
}
|
|
||||||
index *= 10;
|
|
||||||
index += v;
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
path.push_back(index);
|
|
||||||
++i;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (s[i] == '.') {
|
|
||||||
// Error, . cannot be last
|
|
||||||
if (s.size() <= ++i) {
|
|
||||||
SG_LOG(SG_NETWORK, SG_WARN, "HLADataElement: invalid terminating '.' for \""
|
|
||||||
<< s << "\"!");
|
|
||||||
return StringPathPair();
|
|
||||||
}
|
|
||||||
std::string::size_type e = s.find_first_of("[.", i);
|
|
||||||
path.push_back(s.substr(i, e - i));
|
|
||||||
i = e;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return StringPathPair(attribute, path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
HLADataElement::_setStamp(HLADataElement::Stamp* stamp)
|
HLADataElement::_setStamp(HLADataElement::Stamp* stamp)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -83,91 +83,6 @@ public:
|
|||||||
void attachStamp(HLADataElement& dataElement);
|
void attachStamp(HLADataElement& dataElement);
|
||||||
void clearStamp();
|
void clearStamp();
|
||||||
|
|
||||||
/// HLADataElements could be identified by path
|
|
||||||
/// These paths are composed of structure field names and array indices in the
|
|
||||||
/// order they appear while walking to the data element.
|
|
||||||
/// So provide here some tool functions to access these elements
|
|
||||||
/// Note that these functions are relatively expensive in execution time.
|
|
||||||
/// So only use them once at object creation time and store direct references to the values
|
|
||||||
|
|
||||||
class PathElement {
|
|
||||||
public:
|
|
||||||
PathElement(unsigned index) : _data(new IndexData(index)) {}
|
|
||||||
PathElement(const std::string& name) : _data(new FieldData(name)) {}
|
|
||||||
|
|
||||||
bool isFieldValue() const
|
|
||||||
{ return _data->toFieldData(); }
|
|
||||||
bool isIndexValue() const
|
|
||||||
{ return _data->toIndexData(); }
|
|
||||||
|
|
||||||
unsigned getIndexValue() const
|
|
||||||
{
|
|
||||||
const IndexData* indexData = _data->toIndexData();
|
|
||||||
if (!indexData)
|
|
||||||
return ~unsigned(0);
|
|
||||||
return indexData->_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string getFieldValue() const
|
|
||||||
{
|
|
||||||
const FieldData* fieldData = _data->toFieldData();
|
|
||||||
if (!fieldData)
|
|
||||||
return std::string();
|
|
||||||
return fieldData->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Want to be able to use that in std::map and std::set
|
|
||||||
bool operator<(const PathElement& pathElement) const
|
|
||||||
{ return _data->less(pathElement._data.get()); }
|
|
||||||
bool operator==(const PathElement& pathElement) const
|
|
||||||
{ return _data->equal(pathElement._data.get()); }
|
|
||||||
|
|
||||||
void append(std::string& s) const
|
|
||||||
{ _data->append(s); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct FieldData;
|
|
||||||
struct IndexData;
|
|
||||||
struct Data : public SGReferenced {
|
|
||||||
virtual ~Data();
|
|
||||||
virtual const FieldData* toFieldData() const;
|
|
||||||
virtual const IndexData* toIndexData() const;
|
|
||||||
virtual bool less(const Data*) const = 0;
|
|
||||||
virtual bool equal(const Data*) const = 0;
|
|
||||||
virtual void append(std::string&) const = 0;
|
|
||||||
};
|
|
||||||
struct FieldData : public Data {
|
|
||||||
FieldData(const std::string& name);
|
|
||||||
virtual ~FieldData();
|
|
||||||
virtual const FieldData* toFieldData() const;
|
|
||||||
virtual bool less(const Data* data) const;
|
|
||||||
virtual bool equal(const Data* data) const;
|
|
||||||
virtual void append(std::string& s) const;
|
|
||||||
std::string _name;
|
|
||||||
};
|
|
||||||
struct IndexData : public Data {
|
|
||||||
IndexData(unsigned index);
|
|
||||||
virtual ~IndexData();
|
|
||||||
virtual const IndexData* toIndexData() const;
|
|
||||||
virtual bool less(const Data* data) const;
|
|
||||||
virtual bool equal(const Data* data) const;
|
|
||||||
virtual void append(std::string& s) const;
|
|
||||||
unsigned _index;
|
|
||||||
};
|
|
||||||
|
|
||||||
SGSharedPtr<Data> _data;
|
|
||||||
};
|
|
||||||
typedef std::list<PathElement> Path;
|
|
||||||
typedef std::pair<std::string, Path> StringPathPair;
|
|
||||||
typedef std::pair<unsigned, Path> IndexPathPair;
|
|
||||||
|
|
||||||
static std::string toString(const Path& path);
|
|
||||||
static std::string toString(const StringPathPair& path)
|
|
||||||
{ return path.first + toString(path.second); }
|
|
||||||
static StringPathPair toStringPathPair(const std::string& s);
|
|
||||||
static Path toPath(const std::string& s)
|
|
||||||
{ return toStringPathPair(s).second; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Container for the timestamp the originating attribute was last updated for
|
// Container for the timestamp the originating attribute was last updated for
|
||||||
class Stamp : public SGReferenced {
|
class Stamp : public SGReferenced {
|
||||||
@@ -206,60 +121,6 @@ private:
|
|||||||
SGSharedPtr<Stamp> _stamp;
|
SGSharedPtr<Stamp> _stamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
class HLADataElementProvider {
|
|
||||||
public:
|
|
||||||
class AbstractProvider : public SGReferenced {
|
|
||||||
public:
|
|
||||||
virtual ~AbstractProvider() { }
|
|
||||||
virtual HLADataElement* getDataElement(const HLADataElement::Path& path) = 0;
|
|
||||||
// virtual HLADataElement* getDataElement(const HLADataElement::Path& path, const HLADataType* dataType)
|
|
||||||
// {
|
|
||||||
// SGSharedPtr<HLADataElement> dataElement = getDataElement(path);
|
|
||||||
// if (!dataElement.valid())
|
|
||||||
// return 0;
|
|
||||||
// if (!dataElement->setDataType(dataType))
|
|
||||||
// return 0;
|
|
||||||
// return dataElement.release();
|
|
||||||
// }
|
|
||||||
};
|
|
||||||
|
|
||||||
HLADataElementProvider()
|
|
||||||
{ }
|
|
||||||
HLADataElementProvider(HLADataElement* dataElement) :
|
|
||||||
_provider(new ConcreteProvider(dataElement))
|
|
||||||
{ }
|
|
||||||
HLADataElementProvider(const SGSharedPtr<HLADataElement>& dataElement) :
|
|
||||||
_provider(new ConcreteProvider(dataElement))
|
|
||||||
{ }
|
|
||||||
HLADataElementProvider(AbstractProvider* provider) :
|
|
||||||
_provider(provider)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
HLADataElement* getDataElement(const HLADataElement::Path& path) const
|
|
||||||
{
|
|
||||||
if (!_provider.valid())
|
|
||||||
return 0;
|
|
||||||
return _provider->getDataElement(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
class ConcreteProvider : public AbstractProvider {
|
|
||||||
public:
|
|
||||||
ConcreteProvider(const SGSharedPtr<HLADataElement>& dataElement) :
|
|
||||||
_dataElement(dataElement)
|
|
||||||
{ }
|
|
||||||
virtual HLADataElement* getDataElement(const HLADataElement::Path&)
|
|
||||||
{ return _dataElement.get(); }
|
|
||||||
private:
|
|
||||||
SGSharedPtr<HLADataElement> _dataElement;
|
|
||||||
};
|
|
||||||
|
|
||||||
SGSharedPtr<AbstractProvider> _provider;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::map<HLADataElement::Path, HLADataElementProvider> HLAPathElementMap;
|
|
||||||
typedef std::map<unsigned, HLAPathElementMap> HLAAttributePathElementMap;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -140,25 +140,6 @@ HLAInteractionClass::setParameterDataType(unsigned index, const SGSharedPtr<cons
|
|||||||
_parameterVector[index]._dataType = dataType;
|
_parameterVector[index]._dataType = dataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
HLADataElement::IndexPathPair
|
|
||||||
HLAInteractionClass::getIndexPathPair(const HLADataElement::StringPathPair& stringPathPair) const
|
|
||||||
{
|
|
||||||
unsigned index = getParameterIndex(stringPathPair.first);
|
|
||||||
if (getNumParameters() <= index) {
|
|
||||||
SG_LOG(SG_NETWORK, SG_ALERT, "HLAInteractionClass::getIndexPathPair(\""
|
|
||||||
<< HLADataElement::toString(stringPathPair)
|
|
||||||
<< "\"): Could not resolve attribute \"" << stringPathPair.first
|
|
||||||
<< "\" for interaction class \"" << getName() << "\"!");
|
|
||||||
}
|
|
||||||
return HLADataElement::IndexPathPair(index, stringPathPair.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::IndexPathPair
|
|
||||||
HLAInteractionClass::getIndexPathPair(const std::string& path) const
|
|
||||||
{
|
|
||||||
return getIndexPathPair(HLADataElement::toStringPathPair(path));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
HLAInteractionClass::getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const
|
HLAInteractionClass::getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -59,9 +59,6 @@ public:
|
|||||||
const HLADataType* getParameterDataType(unsigned index) const;
|
const HLADataType* getParameterDataType(unsigned index) const;
|
||||||
void setParameterDataType(unsigned index, const SGSharedPtr<const HLADataType>& dataType);
|
void setParameterDataType(unsigned index, const SGSharedPtr<const HLADataType>& dataType);
|
||||||
|
|
||||||
HLADataElement::IndexPathPair getIndexPathPair(const HLADataElement::StringPathPair& stringPathPair) const;
|
|
||||||
HLADataElement::IndexPathPair getIndexPathPair(const std::string& path) const;
|
|
||||||
|
|
||||||
/// Get the attribute data element index for the given path, return true if successful
|
/// Get the attribute data element index for the given path, return true if successful
|
||||||
bool getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const;
|
bool getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const;
|
||||||
HLADataElementIndex getDataElementIndex(const std::string& path) const;
|
HLADataElementIndex getDataElementIndex(const std::string& path) const;
|
||||||
|
|||||||
@@ -166,85 +166,14 @@ private:
|
|||||||
class HLALocationFactory : public SGReferenced {
|
class HLALocationFactory : public SGReferenced {
|
||||||
public:
|
public:
|
||||||
virtual ~HLALocationFactory() {}
|
virtual ~HLALocationFactory() {}
|
||||||
virtual HLAAbstractLocation* createLocation(HLAAttributePathElementMap&) const = 0;
|
|
||||||
virtual HLAAbstractLocation* createLocation(HLAObjectInstance&) const = 0;
|
virtual HLAAbstractLocation* createLocation(HLAObjectInstance&) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class HLACartesianLocationFactory : public HLALocationFactory {
|
class HLACartesianLocationFactory : public HLALocationFactory {
|
||||||
public:
|
public:
|
||||||
virtual HLACartesianLocation* createLocation(HLAAttributePathElementMap& attributePathElementMap) const
|
|
||||||
{
|
|
||||||
HLACartesianLocation* location = new HLACartesianLocation;
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _positonIndexPathPair[i];
|
|
||||||
attributePathElementMap[indexPathPair.first][indexPathPair.second] = location->getPositionDataElement(i);
|
|
||||||
}
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _orientationIndexPathPair[i];
|
|
||||||
attributePathElementMap[indexPathPair.first][indexPathPair.second] = location->getOrientationDataElement(i);
|
|
||||||
}
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _angularVelocityIndexPathPair[i];
|
|
||||||
attributePathElementMap[indexPathPair.first][indexPathPair.second] = location->getAngularVelocityDataElement(i);
|
|
||||||
}
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _linearVelocityIndexPathPair[i];
|
|
||||||
attributePathElementMap[indexPathPair.first][indexPathPair.second] = location->getLinearVelocityDataElement(i);
|
|
||||||
}
|
|
||||||
return location;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual HLACartesianLocation* createLocation(HLAObjectInstance& objectInstance) const
|
virtual HLACartesianLocation* createLocation(HLAObjectInstance& objectInstance) const
|
||||||
{
|
{
|
||||||
HLACartesianLocation* location = new HLACartesianLocation;
|
HLACartesianLocation* location = new HLACartesianLocation;
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _positonIndexPathPair[i];
|
|
||||||
if (indexPathPair.first == 0)
|
|
||||||
continue;
|
|
||||||
std::string path = objectInstance.getAttributeName(indexPathPair.first);
|
|
||||||
if (!indexPathPair.second.empty())
|
|
||||||
path += HLADataElement::toString(indexPathPair.second);
|
|
||||||
HLADataElementIndex index;
|
|
||||||
if (!objectInstance.getDataElementIndex(index, path))
|
|
||||||
continue;
|
|
||||||
objectInstance.setAttributeDataElement(index, location->getPositionDataElement(i));
|
|
||||||
}
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _orientationIndexPathPair[i];
|
|
||||||
if (indexPathPair.first == 0)
|
|
||||||
continue;
|
|
||||||
std::string path = objectInstance.getAttributeName(indexPathPair.first);
|
|
||||||
if (!indexPathPair.second.empty())
|
|
||||||
path += HLADataElement::toString(indexPathPair.second);
|
|
||||||
HLADataElementIndex index;
|
|
||||||
if (!objectInstance.getDataElementIndex(index, path))
|
|
||||||
continue;
|
|
||||||
objectInstance.setAttributeDataElement(index, location->getOrientationDataElement(i));
|
|
||||||
}
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _angularVelocityIndexPathPair[i];
|
|
||||||
if (indexPathPair.first == 0)
|
|
||||||
continue;
|
|
||||||
std::string path = objectInstance.getAttributeName(indexPathPair.first);
|
|
||||||
if (!indexPathPair.second.empty())
|
|
||||||
path += HLADataElement::toString(indexPathPair.second);
|
|
||||||
HLADataElementIndex index;
|
|
||||||
if (!objectInstance.getDataElementIndex(index, path))
|
|
||||||
continue;
|
|
||||||
objectInstance.setAttributeDataElement(index, location->getAngularVelocityDataElement(i));
|
|
||||||
}
|
|
||||||
for (unsigned i = 0; i < 3; ++i) {
|
|
||||||
const HLADataElement::IndexPathPair& indexPathPair = _linearVelocityIndexPathPair[i];
|
|
||||||
if (indexPathPair.first == 0)
|
|
||||||
continue;
|
|
||||||
std::string path = objectInstance.getAttributeName(indexPathPair.first);
|
|
||||||
if (!indexPathPair.second.empty())
|
|
||||||
path += HLADataElement::toString(indexPathPair.second);
|
|
||||||
HLADataElementIndex index;
|
|
||||||
if (!objectInstance.getDataElementIndex(index, path))
|
|
||||||
continue;
|
|
||||||
objectInstance.setAttributeDataElement(index, location->getLinearVelocityDataElement(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < 3; ++i)
|
for (unsigned i = 0; i < 3; ++i)
|
||||||
objectInstance.setAttributeDataElement(_positonIndex[i], location->getPositionDataElement(i));
|
objectInstance.setAttributeDataElement(_positonIndex[i], location->getPositionDataElement(i));
|
||||||
@@ -258,32 +187,6 @@ public:
|
|||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPositionIndexPathPair(unsigned index, const HLADataElement::IndexPathPair& indexPathPair)
|
|
||||||
{
|
|
||||||
if (3 <= index)
|
|
||||||
return;
|
|
||||||
_positonIndexPathPair[index] = indexPathPair;
|
|
||||||
}
|
|
||||||
void setOrientationIndexPathPair(unsigned index, const HLADataElement::IndexPathPair& indexPathPair)
|
|
||||||
{
|
|
||||||
if (3 <= index)
|
|
||||||
return;
|
|
||||||
_orientationIndexPathPair[index] = indexPathPair;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setAngularVelocityIndexPathPair(unsigned index, const HLADataElement::IndexPathPair& indexPathPair)
|
|
||||||
{
|
|
||||||
if (3 <= index)
|
|
||||||
return;
|
|
||||||
_angularVelocityIndexPathPair[index] = indexPathPair;
|
|
||||||
}
|
|
||||||
void setLinearVelocityIndexPathPair(unsigned index, const HLADataElement::IndexPathPair& indexPathPair)
|
|
||||||
{
|
|
||||||
if (3 <= index)
|
|
||||||
return;
|
|
||||||
_linearVelocityIndexPathPair[index] = indexPathPair;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setPositionIndex(unsigned index, const HLADataElementIndex& dataElementIndex)
|
void setPositionIndex(unsigned index, const HLADataElementIndex& dataElementIndex)
|
||||||
{
|
{
|
||||||
if (3 <= index)
|
if (3 <= index)
|
||||||
@@ -311,12 +214,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HLADataElement::IndexPathPair _positonIndexPathPair[3];
|
|
||||||
HLADataElement::IndexPathPair _orientationIndexPathPair[3];
|
|
||||||
|
|
||||||
HLADataElement::IndexPathPair _angularVelocityIndexPathPair[3];
|
|
||||||
HLADataElement::IndexPathPair _linearVelocityIndexPathPair[3];
|
|
||||||
|
|
||||||
HLADataElementIndex _positonIndex[3];
|
HLADataElementIndex _positonIndex[3];
|
||||||
HLADataElementIndex _orientationIndex[3];
|
HLADataElementIndex _orientationIndex[3];
|
||||||
|
|
||||||
@@ -632,35 +529,10 @@ public:
|
|||||||
VerticalSpeedMPerSec = HLAGeodeticLocation::VerticalSpeedMPerSec
|
VerticalSpeedMPerSec = HLAGeodeticLocation::VerticalSpeedMPerSec
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual HLAGeodeticLocation* createLocation(HLAAttributePathElementMap& attributePathElementMap) const
|
|
||||||
{
|
|
||||||
HLAGeodeticLocation* location = new HLAGeodeticLocation;
|
|
||||||
|
|
||||||
for (IndexPathPairSemanticMap::const_iterator i = _indexPathPairSemanticMap.begin();
|
|
||||||
i != _indexPathPairSemanticMap.end(); ++i) {
|
|
||||||
HLAGeodeticLocation::Semantic semantic = HLAGeodeticLocation::Semantic(i->second);
|
|
||||||
attributePathElementMap[i->first.first][i->first.second] = location->getDataElement(semantic);
|
|
||||||
}
|
|
||||||
|
|
||||||
return location;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual HLAGeodeticLocation* createLocation(HLAObjectInstance& objectInstance) const
|
virtual HLAGeodeticLocation* createLocation(HLAObjectInstance& objectInstance) const
|
||||||
{
|
{
|
||||||
HLAGeodeticLocation* location = new HLAGeodeticLocation;
|
HLAGeodeticLocation* location = new HLAGeodeticLocation;
|
||||||
|
|
||||||
for (IndexPathPairSemanticMap::const_iterator i = _indexPathPairSemanticMap.begin();
|
|
||||||
i != _indexPathPairSemanticMap.end(); ++i) {
|
|
||||||
std::string path = objectInstance.getAttributeName(i->first.first);
|
|
||||||
if (!i->first.second.empty())
|
|
||||||
path += HLADataElement::toString(i->first.second);
|
|
||||||
HLADataElementIndex index;
|
|
||||||
if (!objectInstance.getDataElementIndex(index, path))
|
|
||||||
continue;
|
|
||||||
HLAGeodeticLocation::Semantic semantic = HLAGeodeticLocation::Semantic(i->second);
|
|
||||||
objectInstance.setAttributeDataElement(index, location->getDataElement(semantic));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IndexSemanticMap::const_iterator i = _indexSemanticMap.begin();
|
for (IndexSemanticMap::const_iterator i = _indexSemanticMap.begin();
|
||||||
i != _indexSemanticMap.end(); ++i) {
|
i != _indexSemanticMap.end(); ++i) {
|
||||||
HLAGeodeticLocation::Semantic semantic = HLAGeodeticLocation::Semantic(i->second);
|
HLAGeodeticLocation::Semantic semantic = HLAGeodeticLocation::Semantic(i->second);
|
||||||
@@ -670,15 +542,10 @@ public:
|
|||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setIndexPathPair(Semantic semantic, const HLADataElement::IndexPathPair& indexPathPair)
|
|
||||||
{ _indexPathPairSemanticMap[indexPathPair] = semantic; }
|
|
||||||
void setIndex(Semantic semantic, const HLADataElementIndex& index)
|
void setIndex(Semantic semantic, const HLADataElementIndex& index)
|
||||||
{ _indexSemanticMap[index] = semantic; }
|
{ _indexSemanticMap[index] = semantic; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef std::map<HLADataElement::IndexPathPair, Semantic> IndexPathPairSemanticMap;
|
|
||||||
IndexPathPairSemanticMap _indexPathPairSemanticMap;
|
|
||||||
|
|
||||||
typedef std::map<HLADataElementIndex, Semantic> IndexSemanticMap;
|
typedef std::map<HLADataElementIndex, Semantic> IndexSemanticMap;
|
||||||
IndexSemanticMap _indexSemanticMap;
|
IndexSemanticMap _indexSemanticMap;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -191,25 +191,6 @@ HLAObjectClass::setAttributePublicationType(unsigned index, HLAPublicationType p
|
|||||||
_attributeVector[index]._publicationType = publicationType;
|
_attributeVector[index]._publicationType = publicationType;
|
||||||
}
|
}
|
||||||
|
|
||||||
HLADataElement::IndexPathPair
|
|
||||||
HLAObjectClass::getIndexPathPair(const HLADataElement::StringPathPair& stringPathPair) const
|
|
||||||
{
|
|
||||||
unsigned index = getAttributeIndex(stringPathPair.first);
|
|
||||||
if (getNumAttributes() <= index) {
|
|
||||||
SG_LOG(SG_NETWORK, SG_ALERT, "HLAObjectClass::getIndexPathPair(\""
|
|
||||||
<< HLADataElement::toString(stringPathPair)
|
|
||||||
<< "\"): Could not resolve attribute \"" << stringPathPair.first
|
|
||||||
<< "\" for object class \"" << getName() << "\"!");
|
|
||||||
}
|
|
||||||
return HLADataElement::IndexPathPair(index, stringPathPair.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
HLADataElement::IndexPathPair
|
|
||||||
HLAObjectClass::getIndexPathPair(const std::string& path) const
|
|
||||||
{
|
|
||||||
return getIndexPathPair(HLADataElement::toStringPathPair(path));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
HLAObjectClass::getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const
|
HLAObjectClass::getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -72,11 +72,6 @@ public:
|
|||||||
/// Sets the publication type of the attribute with the given index to publicationType
|
/// Sets the publication type of the attribute with the given index to publicationType
|
||||||
void setAttributePublicationType(unsigned index, HLAPublicationType publicationType);
|
void setAttributePublicationType(unsigned index, HLAPublicationType publicationType);
|
||||||
|
|
||||||
/// Return the index, path pair for the given string path pair
|
|
||||||
HLADataElement::IndexPathPair getIndexPathPair(const HLADataElement::StringPathPair&) const;
|
|
||||||
/// Return the index, path pair for the given string path
|
|
||||||
HLADataElement::IndexPathPair getIndexPathPair(const std::string& path) const;
|
|
||||||
|
|
||||||
/// Get the attribute data element index for the given path, return true if successful
|
/// Get the attribute data element index for the given path, return true if successful
|
||||||
bool getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const;
|
bool getDataElementIndex(HLADataElementIndex& dataElementIndex, const std::string& path) const;
|
||||||
HLADataElementIndex getDataElementIndex(const std::string& path) const;
|
HLADataElementIndex getDataElementIndex(const std::string& path) const;
|
||||||
|
|||||||
@@ -156,292 +156,6 @@ HLAObjectInstance::setAttributeDataElement(unsigned index, const SGSharedPtr<HLA
|
|||||||
_attributeVector[index]._dataElement->createStamp();
|
_attributeVector[index]._dataElement->createStamp();
|
||||||
}
|
}
|
||||||
|
|
||||||
class HLAObjectInstance::DataElementFactoryVisitor : public HLADataElementFactoryVisitor {
|
|
||||||
public:
|
|
||||||
DataElementFactoryVisitor(const HLAPathElementMap& pathElementMap) :
|
|
||||||
_pathElementMap(pathElementMap)
|
|
||||||
{ }
|
|
||||||
DataElementFactoryVisitor(const HLADataElement::Path& path, const HLAPathElementMap& pathElementMap) :
|
|
||||||
_pathElementMap(pathElementMap),
|
|
||||||
_path(path)
|
|
||||||
{ }
|
|
||||||
virtual ~DataElementFactoryVisitor() {}
|
|
||||||
|
|
||||||
virtual void apply(const HLADataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
SG_LOG(SG_NETWORK, SG_ALERT, "HLA: Can not find a suitable data element for data type \""
|
|
||||||
<< dataType.getName() << "\"");
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void apply(const HLAInt8DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAUInt8DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAInt16DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAUInt16DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAInt32DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAUInt32DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAInt64DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAUInt64DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAFloat32DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
virtual void apply(const HLAFloat64DataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
|
|
||||||
class ArrayDataElementFactory : public HLAArrayDataElement::DataElementFactory {
|
|
||||||
public:
|
|
||||||
ArrayDataElementFactory(const HLADataElement::Path& path, const HLAPathElementMap& pathElementMap) :
|
|
||||||
_path(path)
|
|
||||||
{
|
|
||||||
for (HLAPathElementMap::const_iterator i = pathElementMap.lower_bound(path);
|
|
||||||
i != pathElementMap.end(); ++i) {
|
|
||||||
if (i->first.begin() != std::search(i->first.begin(), i->first.end(),
|
|
||||||
path.begin(), path.end()))
|
|
||||||
break;
|
|
||||||
_pathElementMap.insert(*i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
virtual HLADataElement* createElement(const HLAArrayDataElement& element, unsigned index)
|
|
||||||
{
|
|
||||||
const HLADataType* dataType = element.getElementDataType();
|
|
||||||
if (!dataType)
|
|
||||||
return 0;
|
|
||||||
HLADataElement::Path path = _path;
|
|
||||||
path.push_back(HLADataElement::PathElement(index));
|
|
||||||
DataElementFactoryVisitor visitor(path, _pathElementMap);
|
|
||||||
dataType->accept(visitor);
|
|
||||||
return visitor._dataElement.release();
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
HLADataElement::Path _path;
|
|
||||||
HLAPathElementMap _pathElementMap;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual void apply(const HLAFixedArrayDataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
SGSharedPtr<HLAArrayDataElement> arrayDataElement;
|
|
||||||
arrayDataElement = new HLAArrayDataElement(&dataType);
|
|
||||||
arrayDataElement->setDataElementFactory(new ArrayDataElementFactory(_path, _pathElementMap));
|
|
||||||
arrayDataElement->setNumElements(dataType.getNumElements());
|
|
||||||
|
|
||||||
_dataElement = arrayDataElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void apply(const HLAVariableArrayDataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
SGSharedPtr<HLAArrayDataElement> arrayDataElement;
|
|
||||||
arrayDataElement = new HLAArrayDataElement(&dataType);
|
|
||||||
arrayDataElement->setDataElementFactory(new ArrayDataElementFactory(_path, _pathElementMap));
|
|
||||||
|
|
||||||
_dataElement = arrayDataElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void apply(const HLAEnumeratedDataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
HLADataElementFactoryVisitor::apply(dataType);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void apply(const HLAFixedRecordDataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
SGSharedPtr<HLAFixedRecordDataElement> recordDataElement;
|
|
||||||
recordDataElement = new HLAFixedRecordDataElement(&dataType);
|
|
||||||
|
|
||||||
unsigned numFields = dataType.getNumFields();
|
|
||||||
for (unsigned i = 0; i < numFields; ++i) {
|
|
||||||
|
|
||||||
_path.push_back(HLADataElement::PathElement(dataType.getFieldName(i)));
|
|
||||||
|
|
||||||
dataType.getFieldDataType(i)->accept(*this);
|
|
||||||
recordDataElement->setField(i, _dataElement.release());
|
|
||||||
|
|
||||||
_path.pop_back();
|
|
||||||
}
|
|
||||||
_dataElement = recordDataElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
class VariantRecordDataElementFactory : public HLAVariantRecordDataElement::DataElementFactory {
|
|
||||||
public:
|
|
||||||
VariantRecordDataElementFactory(const HLADataElement::Path& path, const HLAPathElementMap& pathElementMap) :
|
|
||||||
_path(path)
|
|
||||||
{
|
|
||||||
for (HLAPathElementMap::const_iterator i = pathElementMap.lower_bound(path);
|
|
||||||
i != pathElementMap.end(); ++i) {
|
|
||||||
if (i->first.begin() != std::search(i->first.begin(), i->first.end(),
|
|
||||||
path.begin(), path.end()))
|
|
||||||
break;
|
|
||||||
_pathElementMap.insert(*i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
virtual HLADataElement* createElement(const HLAVariantRecordDataElement& element, unsigned index)
|
|
||||||
{
|
|
||||||
const HLAVariantRecordDataType* dataType = element.getDataType();
|
|
||||||
if (!dataType)
|
|
||||||
return 0;
|
|
||||||
const HLADataType* alternativeDataType = element.getAlternativeDataType();
|
|
||||||
if (!alternativeDataType)
|
|
||||||
return 0;
|
|
||||||
HLADataElement::Path path = _path;
|
|
||||||
path.push_back(HLADataElement::PathElement(dataType->getAlternativeName(index)));
|
|
||||||
DataElementFactoryVisitor visitor(path, _pathElementMap);
|
|
||||||
alternativeDataType->accept(visitor);
|
|
||||||
return visitor._dataElement.release();
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
HLADataElement::Path _path;
|
|
||||||
HLAPathElementMap _pathElementMap;
|
|
||||||
};
|
|
||||||
|
|
||||||
virtual void apply(const HLAVariantRecordDataType& dataType)
|
|
||||||
{
|
|
||||||
_dataElement = createDataElement(_path, dataType);
|
|
||||||
if (_dataElement.valid())
|
|
||||||
return;
|
|
||||||
|
|
||||||
SGSharedPtr<HLAVariantRecordDataElement> variantRecordDataElement;
|
|
||||||
variantRecordDataElement = new HLAVariantRecordDataElement(&dataType);
|
|
||||||
variantRecordDataElement->setDataElementFactory(new VariantRecordDataElementFactory(_path, _pathElementMap));
|
|
||||||
|
|
||||||
_dataElement = variantRecordDataElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
SGSharedPtr<HLADataElement> createDataElement(const HLADataElement::Path& path, const HLADataType& dataType)
|
|
||||||
{
|
|
||||||
HLAPathElementMap::const_iterator i = _pathElementMap.find(path);
|
|
||||||
if (i == _pathElementMap.end()) {
|
|
||||||
SG_LOG(SG_IO, SG_WARN, "No dataElement provided for \""
|
|
||||||
<< HLADataElement::toString(path) << "\".");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
SGSharedPtr<HLADataElement> dataElement = i->second.getDataElement(path);
|
|
||||||
if (!dataElement->setDataType(&dataType)) {
|
|
||||||
SG_LOG(SG_IO, SG_ALERT, "Cannot set data type for data element at \""
|
|
||||||
<< HLADataElement::toString(path) << "\"!");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
SG_LOG(SG_IO, SG_DEBUG, "Using provided dataElement for \""
|
|
||||||
<< HLADataElement::toString(path) << "\".");
|
|
||||||
return dataElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
const HLAPathElementMap& _pathElementMap;
|
|
||||||
HLADataElement::Path _path;
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
HLAObjectInstance::setAttribute(unsigned index, const HLAPathElementMap& pathElementMap)
|
|
||||||
{
|
|
||||||
const HLADataType* dataType = getAttributeDataType(index);
|
|
||||||
if (!dataType) {
|
|
||||||
SG_LOG(SG_IO, SG_ALERT, "Cannot get attribute data type for setting attribute \""
|
|
||||||
<< getAttributeName(index) << "\" at index " << index << "!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SG_LOG(SG_IO, SG_DEBUG, "Setting DataElement for attribute \""
|
|
||||||
<< getAttributeName(index) << "\".");
|
|
||||||
|
|
||||||
DataElementFactoryVisitor visitor(pathElementMap);
|
|
||||||
dataType->accept(visitor);
|
|
||||||
setAttributeDataElement(index, visitor.getDataElement());
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
HLAObjectInstance::setAttributes(const HLAAttributePathElementMap& attributePathElementMap)
|
|
||||||
{
|
|
||||||
for (HLAAttributePathElementMap::const_iterator i = attributePathElementMap.begin();
|
|
||||||
i != attributePathElementMap.end(); ++i) {
|
|
||||||
setAttribute(i->first, i->second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
HLAObjectInstance::getDataElementIndex(HLADataElementIndex& index, const std::string& path) const
|
HLAObjectInstance::getDataElementIndex(HLADataElementIndex& index, const std::string& path) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -73,9 +73,6 @@ public:
|
|||||||
|
|
||||||
/// Sets the data element of the attribute with the given index to dataElement
|
/// Sets the data element of the attribute with the given index to dataElement
|
||||||
void setAttributeDataElement(unsigned index, const SGSharedPtr<HLADataElement>& dataElement);
|
void setAttributeDataElement(unsigned index, const SGSharedPtr<HLADataElement>& dataElement);
|
||||||
/// Sets the data element of the attribute with the given index to the content of pathElementMap
|
|
||||||
void setAttribute(unsigned index, const HLAPathElementMap& pathElementMap);
|
|
||||||
void setAttributes(const HLAAttributePathElementMap& attributePathElementMap);
|
|
||||||
|
|
||||||
/// Retrieve the data element index for the given path.
|
/// Retrieve the data element index for the given path.
|
||||||
bool getDataElementIndex(HLADataElementIndex& index, const std::string& path) const;
|
bool getDataElementIndex(HLADataElementIndex& index, const std::string& path) const;
|
||||||
@@ -173,8 +170,6 @@ private:
|
|||||||
void _reflectAttributeValues(const HLAIndexList& indexList, const RTIData& tag);
|
void _reflectAttributeValues(const HLAIndexList& indexList, const RTIData& tag);
|
||||||
void _reflectAttributeValues(const HLAIndexList& indexList, const SGTimeStamp& timeStamp, const RTIData& tag);
|
void _reflectAttributeValues(const HLAIndexList& indexList, const SGTimeStamp& timeStamp, const RTIData& tag);
|
||||||
|
|
||||||
class DataElementFactoryVisitor;
|
|
||||||
|
|
||||||
struct Attribute {
|
struct Attribute {
|
||||||
Attribute() : _enabledUpdate(false), _unconditionalUpdate(false) {}
|
Attribute() : _enabledUpdate(false), _unconditionalUpdate(false) {}
|
||||||
SGSharedPtr<HLADataElement> _dataElement;
|
SGSharedPtr<HLADataElement> _dataElement;
|
||||||
|
|||||||
Reference in New Issue
Block a user