]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAObjectInstance.hxx
Windows versionhelpers.h support.
[simgear.git] / simgear / hla / HLAObjectInstance.hxx
index b84038bc97021f2958ae342745b4f188eabce985..e5545207ff7f90131a8d2bd9cfaa9b82db638a71 100644 (file)
@@ -73,13 +73,47 @@ public:
 
     /// 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);
@@ -127,25 +161,6 @@ public:
     const SGSharedPtr<ReflectCallback>& 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 = attributeCallback; }
-    const SGSharedPtr<AttributeCallback>& getAttributeCallback() const
-    { return _attributeCallback; }
-
 private:
     void _setRTIObjectInstance(RTIObjectInstance* rtiObjectInstance);
     void _clearRTIObjectInstance();
@@ -155,8 +170,6 @@ 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<HLADataElement> _dataElement;
@@ -192,7 +205,6 @@ private:
     // Callback classes
     SGSharedPtr<UpdateCallback> _updateCallback;
     SGSharedPtr<ReflectCallback> _reflectCallback;
-    SGSharedPtr<AttributeCallback> _attributeCallback;
 
     friend class HLAFederate;
     friend class HLAObjectClass;