1 // Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Library General Public
5 // License as published by the Free Software Foundation; either
6 // version 2 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Library General Public License for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #ifndef RTI13ObjectInstance_hxx
19 #define RTI13ObjectInstance_hxx
24 #ifndef RTI_USES_STD_FSTREAM
25 #define RTI_USES_STD_FSTREAM
30 #include <simgear/structure/SGWeakPtr.hxx>
32 #include "RTIObjectInstance.hxx"
33 #include "RTI13ObjectClass.hxx"
37 class RTI13Ambassador;
38 class RTI13ObjectClass;
40 typedef std::pair<RTI::AttributeHandle, RTIData> RTI13AttributeHandleDataPair;
41 typedef std::list<RTI13AttributeHandleDataPair> RTI13AttributeHandleDataPairList;
43 class RTI13ObjectInstance : public RTIObjectInstance {
45 RTI13ObjectInstance(const RTI::ObjectHandle& handle, HLAObjectInstance* hlaObjectInstance, const RTI13ObjectClass* objectClass, RTI13Ambassador* ambassador);
46 virtual ~RTI13ObjectInstance();
48 const RTI::ObjectHandle& getHandle() const
50 void setHandle(const RTI::ObjectHandle& handle)
53 virtual const RTIObjectClass* getObjectClass() const;
54 const RTI13ObjectClass* get13ObjectClass() const;
56 unsigned getNumAttributes() const
57 { return get13ObjectClass()->getNumAttributes(); }
58 unsigned getAttributeIndex(const RTI::AttributeHandle& handle) const
59 { return get13ObjectClass()->getAttributeIndex(handle); }
60 RTI::AttributeHandle getAttributeHandle(unsigned index) const
61 { return get13ObjectClass()->getAttributeHandle(index); }
63 virtual std::string getName() const;
65 virtual void deleteObjectInstance(const RTIData& tag);
66 virtual void deleteObjectInstance(const SGTimeStamp& timeStamp, const RTIData& tag);
67 virtual void localDeleteObjectInstance();
69 void reflectAttributeValues(RTI13AttributeHandleDataPairList& attributeHandleDataPairList,
70 const RTIData& tag, HLAIndexList& indexPool);
71 void reflectAttributeValues(RTI13AttributeHandleDataPairList& attributeHandleDataPairList,
72 const SGTimeStamp& timeStamp, const RTIData& tag, HLAIndexList& indexPool);
73 virtual void requestObjectAttributeValueUpdate(const HLAIndexList& indexList);
74 void provideAttributeValueUpdate(const std::vector<RTI::AttributeHandle>& attributes);
76 virtual void updateAttributeValues(const RTIData& tag);
77 virtual void updateAttributeValues(const SGTimeStamp& timeStamp, const RTIData& tag);
79 virtual bool isAttributeOwnedByFederate(unsigned index) const;
81 void attributesInScope(const std::vector<RTI::AttributeHandle>& attributes);
82 void attributesOutOfScope(const std::vector<RTI::AttributeHandle>& attributes);
84 void turnUpdatesOnForObjectInstance(const std::vector<RTI::AttributeHandle>& attributes);
85 void turnUpdatesOffForObjectInstance(const std::vector<RTI::AttributeHandle>& attributes);
87 // Not yet sure what to do here. But the dispatch functions are already there
88 void requestAttributeOwnershipAssumption(const std::vector<RTI::AttributeHandle>& attributes, const RTIData& tag);
89 void attributeOwnershipDivestitureNotification(const std::vector<RTI::AttributeHandle>& attributes);
90 void attributeOwnershipAcquisitionNotification(const std::vector<RTI::AttributeHandle>& attributes);
91 void attributeOwnershipUnavailable(const std::vector<RTI::AttributeHandle>& attributes);
92 void requestAttributeOwnershipRelease(const std::vector<RTI::AttributeHandle>& attributes, const RTIData& tag);
93 void confirmAttributeOwnershipAcquisitionCancellation(const std::vector<RTI::AttributeHandle>& attributes);
94 void informAttributeOwnership(RTI::AttributeHandle attributeHandle, RTI::FederateHandle federateHandle);
95 void attributeIsNotOwned(RTI::AttributeHandle attributeHandle);
96 void attributeOwnedByRTI(RTI::AttributeHandle attributeHandle);
99 RTI::ObjectHandle _handle;
100 SGSharedPtr<const RTI13ObjectClass> _objectClass;
101 SGSharedPtr<RTI13Ambassador> _ambassador;
103 // cached storage for updates
104 std::auto_ptr<RTI::AttributeHandleValuePairSet> _attributeValuePairSet;