]> git.mxchange.org Git - simgear.git/blob - simgear/hla/HLAInteractionClass.hxx
Merge branch 'timoore/optimizations' into next
[simgear.git] / simgear / hla / HLAInteractionClass.hxx
1 // Copyright (C) 2009 - 2012  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 HLAInteractionClass_hxx
19 #define HLAInteractionClass_hxx
20
21 #include <map>
22 #include <string>
23 #include <vector>
24
25 #include <simgear/structure/SGWeakReferenced.hxx>
26
27 #include "HLADataElement.hxx"
28 #include "HLADataType.hxx"
29 #include "HLATypes.hxx"
30
31 namespace simgear {
32
33 class RTIInteractionClass;
34 class HLADataType;
35 class HLAFederate;
36
37 class HLAInteractionClass : public SGWeakReferenced {
38 public:
39     HLAInteractionClass(const std::string& name, HLAFederate* federate);
40     virtual ~HLAInteractionClass();
41
42     const std::string& getName() const;
43
44     /// return the federate this interaction class belongs to
45     const SGWeakPtr<HLAFederate>& getFederate() const;
46
47     HLASubscriptionType getSubscriptionType() const;
48     void setSubscriptionType(HLASubscriptionType subscriptionType);
49
50     HLAPublicationType getPublicationType() const;
51     void setPublicationType(HLAPublicationType publicationType);
52
53     unsigned getNumParameters() const;
54     unsigned addParameter(const std::string& name);
55
56     unsigned getParameterIndex(const std::string& name) const;
57     std::string getParameterName(unsigned index) const;
58
59     const HLADataType* getParameterDataType(unsigned index) const;
60     void setParameterDataType(unsigned index, const SGSharedPtr<const HLADataType>& dataType);
61
62     HLADataElement::IndexPathPair getIndexPathPair(const HLADataElement::StringPathPair& stringPathPair) const;
63     HLADataElement::IndexPathPair getIndexPathPair(const std::string& path) const;
64
65     virtual bool subscribe();
66     virtual bool unsubscribe();
67
68     virtual bool publish();
69     virtual bool unpublish();
70
71 private:
72     HLAInteractionClass(const HLAInteractionClass&);
73     HLAInteractionClass& operator=(const HLAInteractionClass&);
74
75     void _setRTIInteractionClass(RTIInteractionClass* interactionClass);
76     void _resolveParameterIndex(const std::string& name, unsigned index);
77     void _clearRTIInteractionClass();
78
79     struct Parameter {
80         Parameter() {}
81         Parameter(const std::string& name) : _name(name) {}
82         std::string _name;
83         SGSharedPtr<const HLADataType> _dataType;
84     };
85     typedef std::vector<Parameter> ParameterVector;
86     typedef std::map<std::string,unsigned> NameIndexMap;
87
88     /// The parent federate.
89     SGWeakPtr<HLAFederate> _federate;
90
91     /// The rti class if already instantiated.
92     RTIInteractionClass* _rtiInteractionClass;
93
94     /// The interaction class name
95     std::string _name;
96
97     /// The configured subscription and publication type
98     HLASubscriptionType _subscriptionType;
99     HLAPublicationType _publicationType;
100
101     /// The parameter data
102     ParameterVector _parameterVector;
103     /// The mapping from parameter names to parameter indices
104     NameIndexMap _nameIndexMap;
105
106     friend class HLAFederate;
107 };
108
109 } // namespace simgear
110
111 #endif