19 #ifndef INCLUDE_RCF_CONFIG_HPP
20 #define INCLUDE_RCF_CONFIG_HPP
22 #include <boost/config.hpp>
23 #include <boost/mpl/int.hpp>
25 #ifdef BOOST_NO_STD_WSTRING
26 #error RCF requires compiler support for std::wstring.
29 #ifdef RCF_USE_BOOST_THREADS
30 #error RCF_USE_BOOST_THREADS is no longer supported. RCF now uses an internal threading library.
33 #ifndef RCF_MAX_METHOD_COUNT
34 #define RCF_MAX_METHOD_COUNT 100
38 #if defined(__CYGWIN__) && !defined(RCF_USE_BOOST_ASIO)
39 #define RCF_USE_BOOST_ASIO
46 #if defined(BOOST_NO_NOEXCEPT) || defined(BOOST_NO_CXX11_NOEXCEPT)
47 #define RCF_DTOR_THROWS
49 #define RCF_DTOR_THROWS noexcept(false)
80 #if defined(RCF_FEATURE_LOCALSOCKET) && defined(BOOST_WINDOWS)
81 #undef RCF_FEATURE_LOCALSOCKET
82 #define RCF_FEATURE_LOCALSOCKET 0
86 #if defined(RCF_FEATURE_NAMEDPIPE) && !defined(BOOST_WINDOWS)
87 #undef RCF_FEATURE_NAMEDPIPE
88 #define RCF_FEATURE_NAMEDPIPE 0
92 #if defined(RCF_FEATURE_SSPI) && !defined(BOOST_WINDOWS)
93 #undef RCF_FEATURE_SSPI
94 #define RCF_FEATURE_SSPI 0
101 #ifndef RCF_FEATURE_ZLIB
103 #define RCF_FEATURE_ZLIB 1
105 #define RCF_FEATURE_ZLIB 0
110 #ifndef RCF_FEATURE_OPENSSL
111 #ifdef RCF_USE_OPENSSL
112 #define RCF_FEATURE_OPENSSL 1
114 #define RCF_FEATURE_OPENSSL 0
119 #ifndef RCF_FEATURE_SSPI
120 #if defined(BOOST_WINDOWS) && RCF_PRO == 1
121 #define RCF_FEATURE_SSPI 1
123 #define RCF_FEATURE_SSPI 0
128 #ifndef RCF_FEATURE_FILETRANSFER
129 #ifdef RCF_USE_BOOST_FILESYSTEM
130 #define RCF_FEATURE_FILETRANSFER 1
132 #define RCF_FEATURE_FILETRANSFER 0
137 #ifndef RCF_FEATURE_SERVER
138 #define RCF_FEATURE_SERVER 1
142 #ifndef RCF_FEATURE_PUBSUB
143 #define RCF_FEATURE_PUBSUB 1
147 #ifndef RCF_FEATURE_LEGACY
148 #define RCF_FEATURE_LEGACY 1
152 #ifndef RCF_FEATURE_HTTP
153 #define RCF_FEATURE_HTTP 1
157 #ifndef RCF_FEATURE_UDP
158 #define RCF_FEATURE_UDP 1
162 #ifndef RCF_FEATURE_NAMEDPIPE
164 #define RCF_FEATURE_NAMEDPIPE 1
166 #define RCF_FEATURE_NAMEDPIPE 0
171 #ifndef RCF_FEATURE_LOCALSOCKET
173 #define RCF_FEATURE_LOCALSOCKET 0
175 #define RCF_FEATURE_LOCALSOCKET 1
180 #ifndef RCF_FEATURE_TCP
181 #define RCF_FEATURE_TCP 1
185 #ifndef RCF_FEATURE_JSON
187 #define RCF_FEATURE_JSON 1
189 #define RCF_FEATURE_JSON 0
194 #ifndef RCF_FEATURE_IPV6
195 #define RCF_FEATURE_IPV6 1
199 #ifndef RCF_FEATURE_PROTOBUF
200 #ifdef RCF_USE_PROTOBUF
201 #define RCF_FEATURE_PROTOBUF 1
203 #define RCF_FEATURE_PROTOBUF 0
208 #ifndef RCF_FEATURE_CUSTOM_ALLOCATOR
209 #ifdef RCF_USE_CUSTOM_ALLOCATOR
210 #define RCF_FEATURE_CUSTOM_ALLOCATOR 1
212 #define RCF_FEATURE_CUSTOM_ALLOCATOR 0
220 #ifndef RCF_FEATURE_SF
221 #ifdef RCF_USE_SF_SERIALIZATION
222 #define RCF_FEATURE_SF 1
223 #elif !defined(RCF_USE_SF_SERIALIZATION) && defined(RCF_USE_BOOST_SERIALIZATION)
224 #define RCF_FEATURE_SF 0
226 #define RCF_FEATURE_SF 1
230 #ifndef RCF_FEATURE_BOOST_SERIALIZATION
231 #ifdef RCF_USE_BOOST_SERIALIZATION
232 #define RCF_FEATURE_BOOST_SERIALIZATION 1
234 #define RCF_FEATURE_BOOST_SERIALIZATION 0
244 #if defined(_MSC_VER) && (_MSC_VER >= 1600 || (_MSC_VER == 1500 && _MSC_FULL_VER >= 150030729))
246 #define RCF_TR1_HEADER(x) <x>
250 #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
252 #define RCF_TR1_HEADER(x) <tr1/x>
255 #endif // RCF_USE_TR1
258 #ifndef RCF_USE_HASH_MAP
260 #if (defined(_MSC_VER) && _MSC_VER >= 1310) || (defined(__GNUC__) && __GNUC__ == 3)
261 #define RCF_USE_HASH_MAP
262 #if defined(_MSC_VER)
263 #define RCF_HASH_MAP_HEADER(x) <x>
264 #define RCF_HASH_MAP_NS stdext
265 #elif defined(__GNUC__)
266 #define RCF_HASH_MAP_HEADER(x) <ext/x>
267 #define RCF_HASH_MAP_NS __gnu_cxx
271 #endif // RCF_USE_HASH_MAP
275 #ifndef RCF_USE_SF_SERIALIZATION
276 typedef boost::mpl::int_<0> RcfConfig_SF;
278 typedef boost::mpl::int_<1> RcfConfig_SF;
281 #ifndef RCF_USE_BOOST_SERIALIZATION
282 typedef boost::mpl::int_<0> RcfConfig_BSer;
284 typedef boost::mpl::int_<1> RcfConfig_BSer;
287 #ifndef RCF_USE_BOOST_FILESYSTEM
288 typedef boost::mpl::int_<0> RcfConfig_BFs;
290 typedef boost::mpl::int_<1> RcfConfig_BFs;
293 #if RCF_FEATURE_JSON==0
294 typedef boost::mpl::int_<0> RcfConfig_Json;
296 typedef boost::mpl::int_<1> RcfConfig_Json;
299 template<
int N1,
int N2,
int N3,
int N4>
300 struct RcfConfigurationDetectMismatches
304 typedef RcfConfigurationDetectMismatches<
306 RcfConfig_BSer::value,
307 RcfConfig_BFs::value,
308 RcfConfig_Json::value> RcfConfigT;
312 #endif // ! INCLUDE_RCF_CONFIG_HPP