OpenDDS  Snapshot(2023/04/28-20:55)
Definitions.h
Go to the documentation of this file.
1 /*
2  * Distributed under the OpenDDS License.
3  * See: http://www.opendds.org/license.html
4  */
5 
6 #ifndef OPENDDS_DCPS_DEFINITIONS_H
7 #define OPENDDS_DCPS_DEFINITIONS_H
8 
10 
11 #include <ace/Message_Block.h>
12 #include <ace/Global_Macros.h>
13 #include <ace/Null_Mutex.h>
14 
15 #include <functional>
16 #include <utility>
17 
18 #ifndef ACE_LACKS_PRAGMA_ONCE
19 # pragma once
20 #endif
21 
22 // More strict check than ACE does: if we have GNU lib C++ without support for
23 // wchar_t (std::wstring, std::wostream, etc.) then we don't have DDS_HAS_WCHAR
24 #if defined ACE_HAS_WCHAR && (!defined _GLIBCPP_VERSION || defined_GLIBCPP_USE_WCHAR_T)
25 # define DDS_HAS_WCHAR
26 #endif
27 
28 #ifdef ACE_HAS_CPP11
29 # define OPENDDS_DELETED_COPY_MOVE_CTOR_ASSIGN(CLASS) \
30  CLASS(const CLASS&) = delete; \
31  CLASS(CLASS&&) = delete; \
32  CLASS& operator=(const CLASS&) = delete; \
33  CLASS& operator=(CLASS&&) = delete;
34 #else
35 # define OPENDDS_DELETED_COPY_MOVE_CTOR_ASSIGN(CLASS) \
36  ACE_UNIMPLEMENTED_FUNC(CLASS(const CLASS&)) \
37  ACE_UNIMPLEMENTED_FUNC(CLASS& operator=(const CLASS&))
38 #endif
39 
40 #if defined ACE_DES_FREE_THIS
41 # define OPENDDS_DES_FREE_THIS ACE_DES_FREE_THIS
42 #else
43 // The macro ACE_DES_FREE_THIS is part of ACE 6.4.2 or newer, define it within
44 // OpenDDS at the moment we compile against an older ACE version
45 # define OPENDDS_DES_FREE_THIS(DEALLOCATOR,CLASS) \
46  do { \
47  this->~CLASS (); \
48  DEALLOCATOR (this); \
49  } \
50  while (0)
51 #endif
52 
53 // If features content_filtered_topic, multi_topic, and query_condition
54 // are all disabled, define a macro to indicate common code these
55 // three features depend on should not be built.
56 #if defined OPENDDS_NO_QUERY_CONDITION && defined OPENDDS_NO_CONTENT_FILTERED_TOPIC && defined OPENDDS_NO_MULTI_TOPIC
57 # define OPENDDS_NO_CONTENT_SUBSCRIPTION_PROFILE
58 #endif
59 
60 #ifndef OPENDDS_HAS_DYNAMIC_DATA_ADAPTER
61 # if !defined OPENDDS_SAFETY_PROFILE && !defined OPENDDS_NO_CONTENT_SUBSCRIPTION_PROFILE
62 # define OPENDDS_HAS_DYNAMIC_DATA_ADAPTER 1
63 # else
64 # define OPENDDS_HAS_DYNAMIC_DATA_ADAPTER 0
65 # endif
66 #endif
67 
68 #ifdef OPENDDS_SAFETY_PROFILE
69 # define OPENDDS_ASSERT(C) ((void) 0)
70 #else
71 # include <cassert>
72 # define OPENDDS_ASSERT(C) assert(C)
73 #endif
74 
75 #define OPENDDS_TEST_AND_CALL(TYPE, TEST, CALL) do { TYPE temp = TEST; if (temp) { temp->CALL; } } while (false);
76 #define OPENDDS_TEST_AND_CALL_ASSIGN(TYPE, TEST, CALL, VAL) do { TYPE temp = TEST; if (temp) { VAL = temp->CALL; } } while (false);
77 
78 #include <tao/orbconf.h>
79 #if defined TAO_HAS_IDL_FEATURES && TAO_HAS_IDL_FEATURES
80 # include <tao/idl_features.h>
81 # define OPENDDS_HAS_EXPLICIT_INTS TAO_IDL_HAS_EXPLICIT_INTS
82 #else
83 # define OPENDDS_HAS_EXPLICIT_INTS 0
84 #endif
85 
86 #if defined __GNUC__ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || defined __clang__)
87 # define OPENDDS_GCC_HAS_DIAG_PUSHPOP 1
88 #else
89 # define OPENDDS_GCC_HAS_DIAG_PUSHPOP 0
90 #endif
91 
93 
94 namespace OpenDDS {
95 namespace DCPS {
96 
97 /// This struct holds both object reference and the corresponding servant.
98 template <typename T_impl, typename T, typename T_ptr, typename T_var>
101  : svt_(0)
102  {}
103 
104  Objref_Servant_Pair(T_impl* svt, T_ptr obj, bool dup)
105  : svt_(svt)
106  {
107  if (dup) {
108  obj_ = T::_duplicate(obj);
109 
110  } else {
111  obj_ = obj;
112  }
113  }
114 
116  {}
117 
118  bool operator==(const Objref_Servant_Pair & pair) const {
119  return pair.svt_ == this->svt_;
120  }
121 
122  bool operator<(const Objref_Servant_Pair & pair) const {
123  return this->svt_ < pair.svt_;
124  }
125 
126  T_impl* svt_;
127  T_var obj_;
128 };
129 
130 /// Use a Foo_var in a std::set or std::map with this comparison function,
131 /// for example std::set<Foo_var, VarLess<Foo> >
132 template <class T, class V = typename T::_var_type>
133 struct VarLess {
136  typedef bool result_type;
137 
138  bool operator()(const V& x, const V& y) const {
139  return x.in() < y.in();
140  }
141 };
142 
143 /// Size of TCHAR buffer for use with ACE::timestamp, e.g.,
144 /// ACE_TCHAR buffer[AceTimestampSize];
145 /// ACE::timestamp(buffer, AceTimestampSize);
146 const size_t AceTimestampSize = 27;
147 
148 /// Size of TCHAR buffer for use with addr_to_string.
149 const size_t AddrToStringSize = 256;
150 
151 } // namespace DCPS
152 } // namespace OpenDDS
153 
155 
156 #endif /* OPENDDS_DCPS_DEFINITION_H */
Objref_Servant_Pair(T_impl *svt, T_ptr obj, bool dup)
Definition: Definitions.h:104
bool operator==(const Objref_Servant_Pair &pair) const
Definition: Definitions.h:118
bool operator()(const V &x, const V &y) const
Definition: Definitions.h:138
bool operator<(const Objref_Servant_Pair &pair) const
Definition: Definitions.h:122
const size_t AddrToStringSize
Size of TCHAR buffer for use with addr_to_string.
Definition: Definitions.h:149
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
This struct holds both object reference and the corresponding servant.
Definition: Definitions.h:99
const size_t AceTimestampSize
Definition: Definitions.h:146
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28