/// Sets the data element of the attribute with the given index to 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.
+ bool getDataElementIndex(HLADataElementIndex& index, const std::string& path) const;
+ HLADataElementIndex getDataElementIndex(const std::string& path) const;
+
+ /// Return the data element of the attribute with the given index
+ HLADataElement* getAttributeDataElement(const HLADataElementIndex& index);
+ const HLADataElement* getAttributeDataElement(const HLADataElementIndex& index) const;
+ /// Set the data element of the attribute with the given index
+ void setAttributeDataElement(const HLADataElementIndex& index, const SGSharedPtr<HLADataElement>& dataElement);
+
+ /// Return the data element of the attribute with the given path.
+ /// The method is only for convenience as parsing the path is expensive.
+ /// Precompute the index and use the index instead if you use this method more often.
+ HLADataElement* getAttributeDataElement(const std::string& path);
+ const HLADataElement* getAttributeDataElement(const std::string& path) const;
+ /// Set the data element of the attribute with the given path
+ /// The method is only for convenience as parsing the path is expensive.
+ /// Precompute the index and use the index instead if you use this method more often.
+ void setAttributeDataElement(const std::string& path, const SGSharedPtr<HLADataElement>& dataElement);
+
+ /// Gets called on discovering this object instance.
+ virtual void discoverInstance(const RTIData& tag);
+ /// Gets called on remove this object instance.
+ virtual void removeInstance(const RTIData& tag);
+
+ /// Call this to register the object instance at the rti and assign the object class to it.
void registerInstance();
- void registerInstance(HLAObjectClass* objectClass);
- void deleteInstance(const RTIData& tag);
+ virtual void registerInstance(HLAObjectClass* objectClass);
+ /// Call this to delete the object instance from the rti.
+ virtual void deleteInstance(const RTIData& tag);
+
+ /// Is called when the instance is either registered or discovered.
+ /// It creates data elements for each element that is not yet set and that has a data type attached.
+ /// the default calls back into the object class createAttributeDataElements method.
+ virtual void createAttributeDataElements();
+ /// Create and set the data element with index. Called somewhere in the above callchain.
+ void createAndSetAttributeDataElement(unsigned index);
+ /// Create an individual data element, the default calls back into the object class
+ /// createAttributeDataElement method.
+ virtual HLADataElement* createAttributeDataElement(unsigned index);
// Push the current values into the RTI
virtual void updateAttributeValues(const RTIData& tag);
void _reflectAttributeValues(const HLAIndexList& indexList, const RTIData& tag);
void _reflectAttributeValues(const HLAIndexList& indexList, const SGTimeStamp& timeStamp, const RTIData& tag);
- class DataElementFactoryVisitor;
-
struct Attribute {
Attribute() : _enabledUpdate(false), _unconditionalUpdate(false) {}
SGSharedPtr<HLADataElement> _dataElement;