1 | /*************************************************************************** |
2 | * Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and * |
3 | * Martin Renou * |
4 | * Copyright (c) QuantStack * |
5 | * Copyright (c) Serge Guelton * |
6 | * * |
7 | * Distributed under the terms of the BSD 3-Clause License. * |
8 | * * |
9 | * The full license is in the file LICENSE, distributed with this software. * |
10 | ****************************************************************************/ |
11 | |
12 | #ifndef XSIMD_HPP |
13 | #define XSIMD_HPP |
14 | |
15 | #if defined(__has_cpp_attribute) |
16 | // if this check passes, then the compiler supports feature test macros |
17 | #if __has_cpp_attribute(nodiscard) >= 201603L |
18 | // if this check passes, then the compiler supports [[nodiscard]] without a message |
19 | #define XSIMD_NO_DISCARD [[nodiscard]] |
20 | #endif |
21 | #endif |
22 | |
23 | #if !defined(XSIMD_NO_DISCARD) && __cplusplus >= 201703L |
24 | // this means that the previous tests failed, but we are using C++17 or higher |
25 | #define XSIMD_NO_DISCARD [[nodiscard]] |
26 | #endif |
27 | |
28 | #if !defined(XSIMD_NO_DISCARD) && (defined(__GNUC__) || defined(__clang__)) |
29 | // this means that the previous checks failed, but we are using GCC or Clang |
30 | #define XSIMD_NO_DISCARD __attribute__((warn_unused_result)) |
31 | #endif |
32 | |
33 | #if !defined(XSIMD_NO_DISCARD) |
34 | // this means that all the previous checks failed, so we fallback to doing nothing |
35 | #define XSIMD_NO_DISCARD |
36 | #endif |
37 | |
38 | #ifdef __cpp_if_constexpr |
39 | // this means that the compiler supports the `if constexpr` construct |
40 | #define XSIMD_IF_CONSTEXPR if constexpr |
41 | #endif |
42 | |
43 | #if !defined(XSIMD_IF_CONSTEXPR) && __cplusplus >= 201703L |
44 | // this means that the previous test failed, but we are using C++17 or higher |
45 | #define XSIMD_IF_CONSTEXPR if constexpr |
46 | #endif |
47 | |
48 | #if !defined(XSIMD_IF_CONSTEXPR) |
49 | // this means that all the previous checks failed, so we fallback to a normal `if` |
50 | #define XSIMD_IF_CONSTEXPR if |
51 | #endif |
52 | |
53 | #include "config/xsimd_config.hpp" |
54 | |
55 | #include "arch/xsimd_scalar.hpp" |
56 | #include "memory/xsimd_aligned_allocator.hpp" |
57 | |
58 | #if defined(XSIMD_NO_SUPPORTED_ARCHITECTURE) |
59 | // to type definition or anything appart from scalar definition and aligned allocator |
60 | #else |
61 | #include "types/xsimd_batch.hpp" |
62 | #include "types/xsimd_batch_constant.hpp" |
63 | #include "types/xsimd_traits.hpp" |
64 | |
65 | // This include must come last |
66 | #include "types/xsimd_api.hpp" |
67 | #endif |
68 | #endif |
69 | |