]> git.mxchange.org Git - simgear.git/blob - simgear/hla/RTIObjectInstance.cxx
Add an initial implementation of a rti/hla dispatcher.
[simgear.git] / simgear / hla / RTIObjectInstance.cxx
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 #include "RTIObjectInstance.hxx"
19 #include "RTIObjectClass.hxx"
20 #include "HLAObjectInstance.hxx"
21
22 namespace simgear {
23
24 RTIObjectInstance::RTIObjectInstance(HLAObjectInstance* hlaObjectInstance) :
25     _hlaObjectInstance(hlaObjectInstance),
26     _pendingAttributeUpdateRequest(false)
27 {
28 }
29
30 RTIObjectInstance::~RTIObjectInstance()
31 {
32 }
33
34 unsigned
35 RTIObjectInstance::getNumAttributes() const
36 {
37     return getObjectClass()->getNumAttributes();
38 }
39
40 unsigned
41 RTIObjectInstance::getAttributeIndex(const std::string& name) const
42 {
43     return getObjectClass()->getAttributeIndex(name);
44 }
45
46 std::string
47 RTIObjectInstance::getAttributeName(unsigned index) const
48 {
49     return getObjectClass()->getAttributeName(index);
50 }
51
52 void
53 RTIObjectInstance::removeInstance(const RTIData& tag)
54 {
55     SGSharedPtr<HLAObjectInstance> hlaObjectInstance =  _hlaObjectInstance.lock();
56     if (!hlaObjectInstance.valid())
57         return;
58     hlaObjectInstance->removeInstance(tag);
59 }
60
61 void
62 RTIObjectInstance::reflectAttributeValues(const RTIIndexDataPairList& dataPairList, const RTIData& tag)
63 {
64     for (RTIIndexDataPairList::const_iterator i = dataPairList.begin();
65          i != dataPairList.end(); ++i) {
66         reflectAttributeValue(i->first, i->second);
67     }
68
69     SGSharedPtr<HLAObjectInstance> hlaObjectInstance =  _hlaObjectInstance.lock();
70     if (!hlaObjectInstance.valid())
71         return;
72     hlaObjectInstance->reflectAttributeValues(dataPairList, tag);
73 }
74
75 void
76 RTIObjectInstance::reflectAttributeValues(const RTIIndexDataPairList& dataPairList,
77                                           const SGTimeStamp& timeStamp, const RTIData& tag)
78 {
79     for (RTIIndexDataPairList::const_iterator i = dataPairList.begin();
80          i != dataPairList.end(); ++i) {
81         reflectAttributeValue(i->first, i->second);
82     }
83
84     SGSharedPtr<HLAObjectInstance> hlaObjectInstance =  _hlaObjectInstance.lock();
85     if (!hlaObjectInstance.valid())
86         return;
87     hlaObjectInstance->reflectAttributeValues(dataPairList, timeStamp, tag);
88 }
89
90 }