X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAObjectInstance.hxx;h=e5545207ff7f90131a8d2bd9cfaa9b82db638a71;hb=d4310a7f3b27b8403ba1ec030cfd3b4c6c565f24;hp=d0f47b083e84ee2d041c1fb60f5fd65c945cfc3b;hpb=50380bc6c525bf06158341e3181f1f6ff0542b88;p=simgear.git diff --git a/simgear/hla/HLAObjectInstance.hxx b/simgear/hla/HLAObjectInstance.hxx index d0f47b08..e5545207 100644 --- a/simgear/hla/HLAObjectInstance.hxx +++ b/simgear/hla/HLAObjectInstance.hxx @@ -35,7 +35,7 @@ class HLAObjectClass; class HLAObjectInstance : public SGWeakReferenced { public: - HLAObjectInstance(HLAObjectClass* objectClass); + HLAObjectInstance(HLAObjectClass* objectClass = 0); virtual ~HLAObjectInstance(); /// Return the name of this object instance @@ -73,12 +73,47 @@ public: /// Sets the data element of the attribute with the given index to dataElement void setAttributeDataElement(unsigned index, const SGSharedPtr& 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& 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& 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 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); @@ -126,25 +161,6 @@ public: const SGSharedPtr& getReflectCallback() const { return _reflectCallback; } - // deprecated. - class AttributeCallback : public SGReferenced { - public: - virtual ~AttributeCallback() {} - virtual void updateAttributeValues(HLAObjectInstance& objectInstance, const RTIData& tag) - { } - virtual void reflectAttributeValues(HLAObjectInstance& objectInstance, - const RTIIndexDataPairList& dataPairList, const RTIData& tag) - { } - virtual void reflectAttributeValues(HLAObjectInstance& objectInstance, const RTIIndexDataPairList& dataPairList, - const SGTimeStamp& timeStamp, const RTIData& tag) - { reflectAttributeValues(objectInstance, dataPairList, tag); } - }; - - void setAttributeCallback(const SGSharedPtr& attributeCallback) - { _attributeCallback = attributeCallback; } - const SGSharedPtr& getAttributeCallback() const - { return _attributeCallback; } - private: void _setRTIObjectInstance(RTIObjectInstance* rtiObjectInstance); void _clearRTIObjectInstance(); @@ -154,12 +170,9 @@ private: 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 _dataElement; - // SGSharedPtr _timeStamp; bool _enabledUpdate; bool _unconditionalUpdate; // HLAIndexList::iterator _unconditionalUpdateAttributeIndexListIterator; @@ -192,7 +205,6 @@ private: // Callback classes SGSharedPtr _updateCallback; SGSharedPtr _reflectCallback; - SGSharedPtr _attributeCallback; friend class HLAFederate; friend class HLAObjectClass;