]> git.mxchange.org Git - simgear.git/blob - simgear/hla/RTI13ObjectInstance.hxx
Fix assorted compiler warnings found by Clang
[simgear.git] / simgear / hla / RTI13ObjectInstance.hxx
1 // Copyright (C) 2009 - 2010  Mathias Froehlich - Mathias.Froehlich@web.de
2 //
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.
7 //
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.
12 //
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.
16 //
17
18 #ifndef RTI13ObjectInstance_hxx
19 #define RTI13ObjectInstance_hxx
20
21 #include <map>
22 #include <memory>
23
24 #ifndef RTI_USES_STD_FSTREAM
25 #define RTI_USES_STD_FSTREAM
26 #endif
27
28 #include <RTI.hh>
29
30 #include <simgear/structure/SGWeakPtr.hxx>
31
32 #include "RTIObjectInstance.hxx"
33 #include "RTI13ObjectClass.hxx"
34
35 namespace simgear {
36
37 class RTI13Ambassador;
38 class RTI13ObjectClass;
39
40 typedef std::pair<RTI::AttributeHandle, RTIData> RTI13AttributeHandleDataPair;
41 typedef std::list<RTI13AttributeHandleDataPair> RTI13AttributeHandleDataPairList;
42
43 class RTI13ObjectInstance : public RTIObjectInstance {
44 public:
45     RTI13ObjectInstance(const RTI::ObjectHandle& handle, HLAObjectInstance* hlaObjectInstance, const RTI13ObjectClass* objectClass, RTI13Ambassador* ambassador, bool owned);
46     virtual ~RTI13ObjectInstance();
47
48     const RTI::ObjectHandle& getHandle() const
49     { return _handle; }
50     void setHandle(const RTI::ObjectHandle& handle)
51     { _handle = handle; }
52
53     virtual const RTIObjectClass* getObjectClass() const;
54     const RTI13ObjectClass* get13ObjectClass() const;
55
56     unsigned getNumAttributes() const
57     { return get13ObjectClass()->getNumAttributes(); }
58     unsigned getAttributeIndex(const std::string& name) const
59     { return get13ObjectClass()->getAttributeIndex(name); }
60     unsigned getAttributeIndex(const RTI::AttributeHandle& handle) const
61     { return get13ObjectClass()->getAttributeIndex(handle); }
62     RTI::AttributeHandle getAttributeHandle(unsigned index) const
63     { return get13ObjectClass()->getAttributeHandle(index); }
64
65     virtual std::string getName() const;
66
67     virtual void deleteObjectInstance(const RTIData& tag);
68     virtual void deleteObjectInstance(const SGTimeStamp& timeStamp, const RTIData& tag);
69     virtual void localDeleteObjectInstance();
70
71     void reflectAttributeValues(RTI13AttributeHandleDataPairList& attributeHandleDataPairList, const RTIData& tag);
72     void reflectAttributeValues(RTI13AttributeHandleDataPairList& attributeHandleDataPairList, const SGTimeStamp& timeStamp, const RTIData& tag);
73     virtual void requestObjectAttributeValueUpdate();
74     void provideAttributeValueUpdate(const std::vector<RTI::AttributeHandle>& attributes);
75
76     virtual void updateAttributeValues(const RTIData& tag);
77     virtual void updateAttributeValues(const SGTimeStamp& timeStamp, const RTIData& tag);
78
79     void attributesInScope(const std::vector<RTI::AttributeHandle>& attributes);
80     void attributesOutOfScope(const std::vector<RTI::AttributeHandle>& attributes);
81
82     void turnUpdatesOnForObjectInstance(const std::vector<RTI::AttributeHandle>& attributes);
83     void turnUpdatesOffForObjectInstance(const std::vector<RTI::AttributeHandle>& attributes);
84
85     // Not yet sure what to do here. But the dispatch functions are already there
86     void requestAttributeOwnershipAssumption(const std::vector<RTI::AttributeHandle>& attributes, const RTIData& tag);
87     void attributeOwnershipDivestitureNotification(const std::vector<RTI::AttributeHandle>& attributes);
88     void attributeOwnershipAcquisitionNotification(const std::vector<RTI::AttributeHandle>& attributes);
89     void attributeOwnershipUnavailable(const std::vector<RTI::AttributeHandle>& attributes);
90     void requestAttributeOwnershipRelease(const std::vector<RTI::AttributeHandle>& attributes, const RTIData& tag);
91     void confirmAttributeOwnershipAcquisitionCancellation(const std::vector<RTI::AttributeHandle>& attributes);
92     void informAttributeOwnership(RTI::AttributeHandle attributeHandle, RTI::FederateHandle federateHandle);
93     void attributeIsNotOwned(RTI::AttributeHandle attributeHandle);
94     void attributeOwnedByRTI(RTI::AttributeHandle attributeHandle);
95
96 private:
97     RTI::ObjectHandle _handle;
98     SGSharedPtr<const RTI13ObjectClass> _objectClass;
99     SGSharedPtr<RTI13Ambassador> _ambassador;
100
101     // cached storage for updates
102     std::auto_ptr<RTI::AttributeHandleValuePairSet> _attributeValuePairSet;
103 };
104
105 }
106
107 #endif