MAK RTIspy API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
handleCreator.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2024 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
6 #ifndef handleCreator_H_
7 #define handleCreator_H_
8 
12 
13 #include "rtiApiTypes.h"
14 
15 #include <rtiutil/internalTypes.h>
16 #include <vlutil/vlFedTarget.h>
17 
18 #pragma warning(disable : 4302)
19 
20 #if defined(DtIFSPEC13)
21 
26 
27 #define DEFINE_HANDLE_MAKER(HandleKind) \
28 inline RTI::HandleKind make##HandleKind(Dt##HandleKind handle) \
29 { \
30  return (RTI::HandleKind)(handle); \
31 } \
32  \
33 inline Dt##HandleKind make##HandleKind##Impl( \
34  const RTI::HandleKind& handle) \
35 { \
36  return (Dt##HandleKind)(handle); \
37 }
38 
39 DEFINE_HANDLE_MAKER(FederateHandle)
40 DEFINE_HANDLE_MAKER(ObjectClassHandle)
41 DEFINE_HANDLE_MAKER(InteractionClassHandle)
42 DEFINE_HANDLE_MAKER(AttributeHandle)
43 DEFINE_HANDLE_MAKER(ParameterHandle)
44 DEFINE_HANDLE_MAKER(DimensionHandle)
45 
46 inline RTI::ObjectHandle makeObjectInstanceHandle(DtObjectInstanceHandle handle)
47 {
48  return (RTI::ObjectHandle)(handle);
49 }
50 
51 inline DtObjectInstanceHandle makeObjectInstanceHandleImpl(const RTI::ObjectHandle& handle)
52 {
53  return (DtObjectInstanceHandle)(handle);
54 }
55 
56 #else
57 
58 #include "handleImpl.h"
59 #include <vlutil/vlFedTarget.h>
60 
61 namespace RTI_API
62 {
63 
68 
69 #define DEFINE_HANDLE_CLASS_FRIEND(HandleKind) \
70  \
71 class HandleKind##Friend \
72 { \
73 public: \
74  HandleKind##Friend(); \
75  static RTI_API::HandleKind HandleKind(Dt##HandleKind handleValue); \
76  static RTI_API::HandleKind HandleKind( \
77  RTI_API::VariableLengthData const & encodedValue); \
78  static HandleKind##Implementation const* getImplementation( \
79  RTI_API::HandleKind const& handle); \
80  static HandleKind##Implementation* getImplementation( \
81  RTI_API::HandleKind& handle); \
82 }; \
83  \
84 inline HandleKind##Friend::HandleKind##Friend() \
85 { \
86 } \
87  \
88 inline RTI_API::HandleKind HandleKind##Friend::HandleKind( \
89  Dt##HandleKind handleValue) \
90 { \
91  return RTI_API::HandleKind((HandleKind##Implementation*)handleValue); \
92 } \
93  \
94 inline RTI_API::HandleKind HandleKind##Friend::HandleKind( \
95  RTI_API::VariableLengthData const & encodedValue) \
96 { \
97  return RTI_API::HandleKind(encodedValue); \
98 } \
99  \
100 inline HandleKind##Implementation const * \
101 HandleKind##Friend::getImplementation(RTI_API::HandleKind const& handle) \
102 { \
103  return handle.getImplementation(); \
104 } \
105  \
106 inline HandleKind##Implementation* \
107 HandleKind##Friend::getImplementation(RTI_API::HandleKind & handle) \
108 { \
109  return handle.getImplementation(); \
110 }
111 
114 #define DEFINE_FILL_HANDLE_SET_IMPL(HandleKind) \
115  \
116 inline void fill##HandleKind##SetImpl( \
117  RTI_API::HandleKind##Set const & rtiHandleSet, \
118  Dt##HandleKind##StdSet & internHandleSet) \
119 { \
120  for (RTI_API::HandleKind##Set::const_iterator iter = rtiHandleSet.begin(); \
121  iter != rtiHandleSet.end(); \
122  iter++) \
123  { \
124  internHandleSet.insert(make##HandleKind##Impl(*iter)); \
125  } \
126 }
127 
131 DEFINE_HANDLE_CLASS_FRIEND(ObjectInstanceHandle)
135 DEFINE_HANDLE_CLASS_FRIEND(RegionHandle)
136 #if !defined(DtIFSPEC1516) && !defined(DtIFSPEC1516E)
137 DEFINE_HANDLE_CLASS_FRIEND(TransportationTypeHandle)
138 #endif
139 
143 {
144 public:
146  static RTI_API::MessageRetractionHandle MessageRetractionHandle(DtMessageRetractionHandle handleValue);
147  static RTI_API::MessageRetractionHandle MessageRetractionHandle(RTI_API::VariableLengthData const & encodedValue);
148  static MessageRetractionHandleImplementation const* getImplementation(RTI_API::MessageRetractionHandle const& handle);
149  static MessageRetractionHandleImplementation* getImplementation(RTI_API::MessageRetractionHandle& handle);
150 };
151 
153 {
154 }
155 
156 inline RTI_API::MessageRetractionHandle MessageRetractionHandleFriend::MessageRetractionHandle(
157  DtMessageRetractionHandle handleValue)
158 {
159  return RTI_API::MessageRetractionHandle((MessageRetractionHandleImplementation*)&handleValue);
160 }
161 
162 inline RTI_API::MessageRetractionHandle MessageRetractionHandleFriend::MessageRetractionHandle(
163  RTI_API::VariableLengthData const & encodedValue)
164 {
165  return RTI_API::MessageRetractionHandle(encodedValue);
166 }
167 
169  RTI_API::MessageRetractionHandle const& handle)
170 {
171  return handle.getImplementation();
172 }
173 
175  RTI_API::MessageRetractionHandle & handle)
176 {
177  return handle.getImplementation();
178 }
179 
180 };
181 
184 // These maker macros are defined outside of the namespace to be compatible with those for HLA 1.3
185 // which encapsulates namespace using a class which can't be amended.
187 #define DEFINE_HANDLE_MAKERS(HandleKind) \
188  \
189 inline RTI_API::HandleKind make##HandleKind( \
190  RTI_API::VariableLengthData const & encodedValue) \
191 { \
192  return RTI_API::HandleKind##Friend::HandleKind(encodedValue); \
193 } \
194  \
195 inline Dt##HandleKind make##HandleKind##Impl(const RTI_API::HandleKind& handle) \
196 { \
197  return (Dt##HandleKind)RTI_API::HandleKind##Friend::getImplementation(handle);\
198 } \
199  \
200 inline RTI_API::HandleKind make##HandleKind(Dt##HandleKind handle) \
201 { \
202  return RTI_API::HandleKind##Friend::HandleKind(handle); \
203 }
204 
208 DEFINE_HANDLE_MAKERS(ObjectInstanceHandle)
212 DEFINE_HANDLE_MAKERS(RegionHandle)
213 
214 inline RTI_API::MessageRetractionHandle makeMessageRetractionHandle(RTI_API::VariableLengthData const & encodedValue)
215 {
217 }
218 
219 inline DtMessageRetractionHandle makeMessageRetractionHandleImpl(RTI_API::MessageRetractionHandle handle)
220 {
222 }
223 
224 inline RTI_API::MessageRetractionHandle makeMessageRetractionHandle(DtMessageRetractionHandle handle)
225 {
227 }
228 
229 inline RTI_API::MessageRetractionHandle makeMessageRetractionHandle(DtFederateHandle fedHandle, unsigned long serialNumber)
230 {
231  DtMessageRetractionHandle handleImpl = { serialNumber, fedHandle };
232  return makeMessageRetractionHandle(handleImpl);
233 };
234 
235 inline RTI_API::MessageRetractionHandle makeMessageRetraction(RTI_API::VariableLengthData const& encodedValue)
236 {
238 }
239 
240 
245 
246 namespace RTI_API
247 {
248 #define DEFINE_FILL_HANDLE_SET(HandleKind) \
249  \
250 inline void fill##HandleKind##Set( \
251  Dt##HandleKind##StdSet const & internHandleSet, \
252  RTI_API::HandleKind##Set & rtiHandleSet) \
253 { \
254  for (Dt##HandleKind##StdSet::const_iterator iter = internHandleSet.begin();\
255  iter != internHandleSet.end(); \
256  iter++) \
257  { \
258  rtiHandleSet.insert(make##HandleKind(*iter)); \
259  } \
260 }
261 
268 DEFINE_FILL_HANDLE_SET(RegionHandle)
269 DEFINE_FILL_HANDLE_SET_IMPL(RegionHandle)
270 
271 };
272 
273 #endif
274 
275 
280 
281 #if defined(DtIFSPEC13)
283 {
284  return DtTransportHandle(handle);
285 }
286 
288 {
289  return RTI_API::TransportType(handle);
290 }
291 #elif defined(DtIFSPEC1516) || defined(DtIFSPEC1516E)
293 {
294  return DtTransportHandle(handle);
295 }
296 
298 {
299  return RTI_API::TransportationType(handle);
300 }
301 #else
302 // Maker macro above would work for HLA4 but it would change macro's name,
303 // so define it here explicitly with same name as others
304 inline DtTransportHandle makeTransportationTypeImpl(RTI_API::TransportationTypeHandle handle)
305 {
306  return (DtTransportationTypeHandle)RTI_API::TransportationTypeHandleFriend::getImplementation(handle);
307 }
308 
309 inline RTI_API::TransportationTypeHandle makeTransportationType(DtTransportHandle handle)
310 {
311  return RTI_API::TransportationTypeHandleFriend::TransportationTypeHandle(handle);
312 }
313 
314 inline RTI_API::TransportationTypeHandle makeTransportationType(RTI_API::VariableLengthData const& encodedValue)
315 {
316  return RTI_API::TransportationTypeHandleFriend::TransportationTypeHandle(encodedValue);
317 }
318 
319 #endif
320 
321 #if defined(DtIFSPEC13)
322 inline MAKRti::DtOrderType makeOrderTypeImpl(RTI_API::OrderType order)
323 {
324  return MAKRti::DtOrderType(order);
325 }
326 
327 inline RTI_API::OrderType makeOrderType(MAKRti::DtOrderType order)
328 {
329  return order;
330 }
331 #else
332 inline MAKRti::DtOrderType makeOrderTypeImpl(RTI_API::OrderType order)
333 {
334  return (order == RTI_API::RECEIVE) ? MAKRti::DtReceive : MAKRti::DtTimestamp;
335 }
336 
337 inline RTI_API::OrderType makeOrderType(MAKRti::DtOrderType order)
338 {
339  return (order == MAKRti::DtReceive) ? RTI_API::RECEIVE : RTI_API::TIMESTAMP;
340 }
341 #endif
342 
343 
344 #endif
Handle ObjectHandle
Definition: RTItypes13.h:116
OrderType
Definition: datatypes.pb.h:472
MessageRetractionHandleFriend()
Definition: handleCreator.h:152
static MessageRetractionHandleImplementation const * getImplementation(RTI_API::MessageRetractionHandle const &handle)
Definition: handleCreator.h:168
Definition: datatypes.pb.h:474
RTI_API::TransportationTypeHandle makeTransportationType(DtTransportHandle handle)
Definition: handleCreator.h:309
ULong InteractionClassHandle
Definition: RTItypes13.h:106
TransportationType
Definition: rtiAmbassadorFedProBase.h:43
Handle ParameterHandle
Definition: RTItypes13.h:114
RTI_API::MessageRetractionHandle makeMessageRetractionHandle(RTI_API::VariableLengthData const &encodedValue)
Definition: handleCreator.h:214
TransportationHandle TransportType
Definition: RTItypes13.h:124
static RTI_API::MessageRetractionHandle MessageRetractionHandle(DtMessageRetractionHandle handleValue)
Definition: handleCreator.h:156
DtHandle DtTransportationTypeHandle
Definition: internalTypes.h:61
#define DEFINE_HANDLE_CLASS_FRIEND(HandleKind)
HLA 1516(X) handles require a friend class to help with converting between handles and implementation...
Definition: handleCreator.h:69
RTI_API::OrderType makeOrderType(MAKRti::DtOrderType order)
Definition: handleCreator.h:337
DtTransportHandle makeTransportationTypeImpl(RTI_API::TransportationTypeHandle handle)
!DtIFSPEC13
Definition: handleCreator.h:304
RTI_API::MessageRetractionHandle makeMessageRetraction(RTI_API::VariableLengthData const &encodedValue)
Definition: handleCreator.h:235
#define DEFINE_FILL_HANDLE_SET(HandleKind)
Definition: handleCreator.h:248
Handle DimensionHandle
Definition: RTItypes13.h:118
DtHandle DtFederateHandle
Definition: internalTypes.h:46
DtHandle DtObjectInstanceHandle
Definition: internalTypes.h:50
DtHandle DtTransportHandle
Definition: internalTypes.h:59
Specific message retraction handle class that doesn&#39;t fit the structure of the other handle class imp...
Definition: handleCreator.h:142
#define DEFINE_HANDLE_MAKERS(HandleKind)
Define functions to create handles from the implementation type (or from an encoded value) and vice v...
Definition: handleCreator.h:187
#define DEFINE_FILL_HANDLE_SET_IMPL(HandleKind)
Macro defines a function to fill an internal handle set from a 1516 handle set.
Definition: handleCreator.h:114
Definition: msgRetractHandleImpl.h:30
ULong FederateHandle
Definition: RTItypes13.h:120
Definition: internalTypes.h:84
DtMessageRetractionHandle makeMessageRetractionHandleImpl(RTI_API::MessageRetractionHandle handle)
Definition: handleCreator.h:219
Definition: datatypes.pb.h:473
ULong ObjectClassHandle
Definition: RTItypes13.h:104
The declaration of internal types.
DtMessageRetractionHandle const & value() const
Definition: msgRetractHandleImpl.h:178
Handle AttributeHandle
Definition: RTItypes13.h:112
MAKRti::DtOrderType makeOrderTypeImpl(RTI_API::OrderType order)
Definition: handleCreator.h:332

Document ID: Generated on Wed Jul 8 16:20:32 EDT 2026 from SVN revision 291616
Copyright © 2005-2025 MAK Technologies Inc. All Rights Reserved (www.mak.com)