Home | History | Annotate | Download | only in rxcpp
      1 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
      2 
      3 #pragma once
      4 
      5 #if !defined(RXCPP_RX_INCLUDES_HPP)
      6 #define RXCPP_RX_INCLUDES_HPP
      7 
      8 #include "rx-trace.hpp"
      9 
     10 // some configuration macros
     11 #if defined(_MSC_VER)
     12 
     13 #if _MSC_VER > 1600
     14 #pragma warning(disable: 4348) // false positives on : redefinition of default parameter : parameter 2
     15 #define RXCPP_USE_RVALUEREF 1
     16 #endif
     17 
     18 #if _MSC_VER >= 1800
     19 #define RXCPP_USE_VARIADIC_TEMPLATES 1
     20 #endif
     21 
     22 #if _CPPRTTI
     23 #define RXCPP_USE_RTTI 1
     24 #endif
     25 
     26 #if _HAS_EXCEPTIONS
     27 #define RXCPP_USE_EXCEPTIONS 1
     28 #endif
     29 
     30 #define RXCPP_NORETURN __declspec(noreturn)
     31 
     32 #elif defined(__clang__)
     33 
     34 #if __has_feature(cxx_rvalue_references)
     35 #define RXCPP_USE_RVALUEREF 1
     36 #endif
     37 #if __has_feature(cxx_rtti)
     38 #define RXCPP_USE_RTTI 1
     39 #endif
     40 #if __has_feature(cxx_variadic_templates)
     41 #define RXCPP_USE_VARIADIC_TEMPLATES 1
     42 #endif
     43 #if __has_feature(cxx_exceptions)
     44 #define RXCPP_USE_EXCEPTIONS 1
     45 #endif
     46 
     47 #if __has_feature(cxx_attributes)
     48 #define RXCPP_NORETURN [[noreturn]]
     49 #else
     50 #define RXCPP_NORETURN __attribute__ ((noreturn))
     51 #endif
     52 
     53 #elif defined(__GNUG__)
     54 
     55 #define GCC_VERSION (__GNUC__ * 10000 + \
     56                      __GNUC_MINOR__ * 100 + \
     57                      __GNUC_PATCHLEVEL__)
     58 
     59 #if GCC_VERSION >= 40801
     60 #define RXCPP_USE_RVALUEREF 1
     61 #endif
     62 
     63 #if GCC_VERSION >= 40400
     64 #define RXCPP_USE_VARIADIC_TEMPLATES 1
     65 #endif
     66 
     67 #if defined(__GXX_RTTI)
     68 #define RXCPP_USE_RTTI 1
     69 #endif
     70 
     71 #if defined(__EXCEPTIONS)
     72 #define RXCPP_USE_EXCEPTIONS 1
     73 #endif
     74 
     75 #define RXCPP_NORETURN __attribute__ ((noreturn))
     76 
     77 #endif
     78 
     79 //
     80 // control std::hash<> of enum
     81 // force with RXCPP_FORCE_HASH_ENUM & RXCPP_FORCE_HASH_ENUM_UNDERLYING
     82 // in time use ifdef to detect library support for std::hash<> of enum
     83 //
     84 #define RXCPP_HASH_ENUM 0
     85 #define RXCPP_HASH_ENUM_UNDERLYING 1
     86 
     87 #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
     88 #define RXCPP_USE_WINRT 0
     89 #else
     90 #define RXCPP_USE_WINRT 1
     91 #endif
     92 
     93 #if defined(__APPLE__) && defined(__MACH__)
     94 #include <TargetConditionals.h>
     95 #if (TARGET_OS_IPHONE == 1) || (TARGET_IPHONE_SIMULATOR == 1)
     96 #define RXCPP_ON_IOS
     97 #endif
     98 #endif
     99 
    100 #if defined(__ANDROID__)
    101 #define RXCPP_ON_ANDROID
    102 #endif
    103 
    104 #if defined(RXCPP_FORCE_USE_VARIADIC_TEMPLATES)
    105 #undef RXCPP_USE_VARIADIC_TEMPLATES
    106 #define RXCPP_USE_VARIADIC_TEMPLATES RXCPP_FORCE_USE_VARIADIC_TEMPLATES
    107 #endif
    108 
    109 #if defined(RXCPP_FORCE_USE_RVALUEREF)
    110 #undef RXCPP_USE_RVALUEREF
    111 #define RXCPP_USE_RVALUEREF RXCPP_FORCE_USE_RVALUEREF
    112 #endif
    113 
    114 #if defined(RXCPP_FORCE_USE_RTTI)
    115 #undef RXCPP_USE_RTTI
    116 #define RXCPP_USE_RTTI RXCPP_FORCE_USE_RTTI
    117 #endif
    118 
    119 #if defined(RXCPP_FORCE_USE_EXCEPTIONS)
    120 #undef RXCPP_USE_EXCEPTIONS
    121 #define RXCPP_USE_EXCEPTIONS RXCPP_FORCE_USE_EXCEPTIONS
    122 #endif
    123 
    124 #if defined(RXCPP_FORCE_USE_WINRT)
    125 #undef RXCPP_USE_WINRT
    126 #define RXCPP_USE_WINRT RXCPP_FORCE_USE_WINRT
    127 #endif
    128 
    129 #if defined(RXCPP_FORCE_HASH_ENUM)
    130 #undef RXCPP_HASH_ENUM
    131 #define RXCPP_HASH_ENUM RXCPP_FORCE_HASH_ENUM
    132 #endif
    133 
    134 #if defined(RXCPP_FORCE_HASH_ENUM_UNDERLYING)
    135 #undef RXCPP_HASH_ENUM_UNDERLYING
    136 #define RXCPP_HASH_ENUM_UNDERLYING RXCPP_FORCE_HASH_ENUM_UNDERLYING
    137 #endif
    138 
    139 #if defined(RXCPP_FORCE_ON_IOS)
    140 #undef RXCPP_ON_IOS
    141 #define RXCPP_ON_IOS RXCPP_FORCE_ON_IOS
    142 #endif
    143 
    144 #if defined(RXCPP_FORCE_ON_ANDROID)
    145 #undef RXCPP_ON_ANDROID
    146 #define RXCPP_ON_ANDROID RXCPP_FORCE_ON_ANDROID
    147 #endif
    148 
    149 #if defined(_MSC_VER) && !RXCPP_USE_VARIADIC_TEMPLATES
    150 // resolve args needs enough to store all the possible resolved args
    151 #define _VARIADIC_MAX 10
    152 #endif
    153 
    154 #if defined(_MSC_VER) && (_MSC_VER <= 1800)
    155 #define RXCPP_NOEXCEPT
    156 #else
    157 #define RXCPP_NOEXCEPT noexcept
    158 #endif
    159 
    160 #pragma push_macro("min")
    161 #pragma push_macro("max")
    162 #undef min
    163 #undef max
    164 
    165 #include <stdlib.h>
    166 
    167 #include <cstddef>
    168 
    169 #include <iostream>
    170 #include <iomanip>
    171 
    172 #include <exception>
    173 #include <functional>
    174 #include <memory>
    175 #include <array>
    176 #include <vector>
    177 #include <algorithm>
    178 #include <atomic>
    179 #include <map>
    180 #include <set>
    181 #include <mutex>
    182 #include <deque>
    183 #include <thread>
    184 #include <future>
    185 #include <list>
    186 #include <queue>
    187 #include <chrono>
    188 #include <condition_variable>
    189 #include <initializer_list>
    190 #include <typeinfo>
    191 #include <tuple>
    192 #include <unordered_set>
    193 #include <type_traits>
    194 #include <utility>
    195 
    196 #if defined(RXCPP_ON_IOS) || defined(RXCPP_ON_ANDROID)
    197 #include <pthread.h>
    198 #endif
    199 
    200 #include "rx-util.hpp"
    201 #include "rx-predef.hpp"
    202 #include "rx-subscription.hpp"
    203 #include "rx-observer.hpp"
    204 #include "rx-scheduler.hpp"
    205 #include "rx-subscriber.hpp"
    206 #include "rx-notification.hpp"
    207 #include "rx-coordination.hpp"
    208 #include "rx-sources.hpp"
    209 #include "rx-subjects.hpp"
    210 #include "rx-operators.hpp"
    211 #include "rx-observable.hpp"
    212 #include "rx-connectable_observable.hpp"
    213 #include "rx-grouped_observable.hpp"
    214 
    215 #if !defined(RXCPP_LITE)
    216 #include "operators/rx-all.hpp"
    217 #include "operators/rx-amb.hpp"
    218 #include "operators/rx-any.hpp"
    219 #include "operators/rx-buffer_count.hpp"
    220 #include "operators/rx-buffer_time.hpp"
    221 #include "operators/rx-buffer_time_count.hpp"
    222 #include "operators/rx-combine_latest.hpp"
    223 #include "operators/rx-concat.hpp"
    224 #include "operators/rx-concat_map.hpp"
    225 #include "operators/rx-connect_forever.hpp"
    226 #include "operators/rx-debounce.hpp"
    227 #include "operators/rx-delay.hpp"
    228 #include "operators/rx-distinct.hpp"
    229 #include "operators/rx-distinct_until_changed.hpp"
    230 #include "operators/rx-element_at.hpp"
    231 #include "operators/rx-filter.hpp"
    232 #include "operators/rx-finally.hpp"
    233 #include "operators/rx-flat_map.hpp"
    234 #include "operators/rx-group_by.hpp"
    235 #include "operators/rx-ignore_elements.hpp"
    236 #include "operators/rx-map.hpp"
    237 #include "operators/rx-merge.hpp"
    238 #include "operators/rx-merge_delay_error.hpp"
    239 #include "operators/rx-observe_on.hpp"
    240 #include "operators/rx-on_error_resume_next.hpp"
    241 #include "operators/rx-pairwise.hpp"
    242 #include "operators/rx-reduce.hpp"
    243 #include "operators/rx-repeat.hpp"
    244 #include "operators/rx-replay.hpp"
    245 #include "operators/rx-retry.hpp"
    246 #include "operators/rx-sample_time.hpp"
    247 #include "operators/rx-scan.hpp"
    248 #include "operators/rx-sequence_equal.hpp"
    249 #include "operators/rx-skip.hpp"
    250 #include "operators/rx-skip_while.hpp"
    251 #include "operators/rx-skip_last.hpp"
    252 #include "operators/rx-skip_until.hpp"
    253 #include "operators/rx-start_with.hpp"
    254 #include "operators/rx-subscribe_on.hpp"
    255 #include "operators/rx-switch_if_empty.hpp"
    256 #include "operators/rx-switch_on_next.hpp"
    257 #include "operators/rx-take.hpp"
    258 #include "operators/rx-take_last.hpp"
    259 #include "operators/rx-take_until.hpp"
    260 #include "operators/rx-take_while.hpp"
    261 #include "operators/rx-tap.hpp"
    262 #include "operators/rx-time_interval.hpp"
    263 #include "operators/rx-timeout.hpp"
    264 #include "operators/rx-timestamp.hpp"
    265 #include "operators/rx-window.hpp"
    266 #include "operators/rx-window_time.hpp"
    267 #include "operators/rx-window_time_count.hpp"
    268 #include "operators/rx-window_toggle.hpp"
    269 #include "operators/rx-with_latest_from.hpp"
    270 #include "operators/rx-zip.hpp"
    271 #endif
    272 
    273 #pragma pop_macro("min")
    274 #pragma pop_macro("max")
    275 
    276 #endif
    277