mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 19:40:18 +00:00
138 lines
4.0 KiB
C++
138 lines
4.0 KiB
C++
/***************************************************************************
|
|
* Copyright (c) Johan Mabille, Sylvain Corlay and Wolf Vollprecht *
|
|
* Copyright (c) QuantStack *
|
|
* *
|
|
* Distributed under the terms of the BSD 3-Clause License. *
|
|
* *
|
|
* The full license is in the file LICENSE, distributed with this software. *
|
|
****************************************************************************/
|
|
|
|
#ifndef XTENSOR_CONFIG_HPP
|
|
#define XTENSOR_CONFIG_HPP
|
|
|
|
#define XTENSOR_VERSION_MAJOR 0
|
|
#define XTENSOR_VERSION_MINOR 25
|
|
#define XTENSOR_VERSION_PATCH 0
|
|
|
|
|
|
// Define if the library is going to be using exceptions.
|
|
#if (!defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND))
|
|
#undef XTENSOR_DISABLE_EXCEPTIONS
|
|
#define XTENSOR_DISABLE_EXCEPTIONS
|
|
#endif
|
|
|
|
// Exception support.
|
|
#if defined(XTENSOR_DISABLE_EXCEPTIONS)
|
|
#include <iostream>
|
|
#define XTENSOR_THROW(_, msg) \
|
|
{ \
|
|
std::cerr << msg << std::endl; \
|
|
std::abort(); \
|
|
}
|
|
#else
|
|
#define XTENSOR_THROW(exception, msg) throw exception(msg)
|
|
#endif
|
|
|
|
// Workaround for some missing constexpr functionality in MSVC 2015 and MSVC 2017 x86
|
|
#if defined(_MSC_VER)
|
|
#define XTENSOR_CONSTEXPR_ENHANCED const
|
|
// The following must not be defined to const, otherwise
|
|
// it prevents generation of copy operators of classes
|
|
// containing XTENSOR_CONSTEXPR_ENHANCED_STATIC members
|
|
#define XTENSOR_CONSTEXPR_ENHANCED_STATIC
|
|
#define XTENSOR_CONSTEXPR_RETURN inline
|
|
#else
|
|
#define XTENSOR_CONSTEXPR_ENHANCED constexpr
|
|
#define XTENSOR_CONSTEXPR_RETURN constexpr
|
|
#define XTENSOR_CONSTEXPR_ENHANCED_STATIC constexpr static
|
|
#define XTENSOR_HAS_CONSTEXPR_ENHANCED
|
|
#endif
|
|
|
|
#ifndef XTENSOR_DEFAULT_DATA_CONTAINER
|
|
#define XTENSOR_DEFAULT_DATA_CONTAINER(T, A) uvector<T, A>
|
|
#endif
|
|
|
|
#ifndef XTENSOR_DEFAULT_SHAPE_CONTAINER
|
|
#define XTENSOR_DEFAULT_SHAPE_CONTAINER(T, EA, SA) \
|
|
xt::svector<typename XTENSOR_DEFAULT_DATA_CONTAINER(T, EA)::size_type, 4, SA, true>
|
|
#endif
|
|
|
|
#ifdef XTENSOR_USE_XSIMD
|
|
#include <xsimd/xsimd.hpp>
|
|
#define XSIMD_DEFAULT_ALIGNMENT xsimd::default_arch::alignment()
|
|
#endif
|
|
|
|
|
|
#ifndef XTENSOR_DEFAULT_ALLOCATOR
|
|
#ifdef XTENSOR_ALLOC_TRACKING
|
|
#ifndef XTENSOR_ALLOC_TRACKING_POLICY
|
|
#define XTENSOR_ALLOC_TRACKING_POLICY xt::alloc_tracking::policy::print
|
|
#endif
|
|
#ifdef XTENSOR_USE_XSIMD
|
|
#include <xsimd/xsimd.hpp>
|
|
#define XTENSOR_DEFAULT_ALLOCATOR(T) \
|
|
xt::tracking_allocator<T, xsimd::aligned_allocator<T, XSIMD_DEFAULT_ALIGNMENT>, XTENSOR_ALLOC_TRACKING_POLICY>
|
|
#else
|
|
#define XTENSOR_DEFAULT_ALLOCATOR(T) \
|
|
xt::tracking_allocator<T, std::allocator<T>, XTENSOR_ALLOC_TRACKING_POLICY>
|
|
#endif
|
|
#else
|
|
#ifdef XTENSOR_USE_XSIMD
|
|
|
|
#define XTENSOR_DEFAULT_ALLOCATOR(T) xsimd::aligned_allocator<T, XTENSOR_DEFAULT_ALIGNMENT>
|
|
#else
|
|
#define XTENSOR_DEFAULT_ALLOCATOR(T) std::allocator<T>
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef XTENSOR_DEFAULT_ALIGNMENT
|
|
#ifdef XTENSOR_USE_XSIMD
|
|
#define XTENSOR_DEFAULT_ALIGNMENT XSIMD_DEFAULT_ALIGNMENT
|
|
#else
|
|
#define XTENSOR_DEFAULT_ALIGNMENT 0
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef XTENSOR_DEFAULT_LAYOUT
|
|
#define XTENSOR_DEFAULT_LAYOUT ::xt::layout_type::row_major
|
|
#endif
|
|
|
|
#ifndef XTENSOR_DEFAULT_TRAVERSAL
|
|
#define XTENSOR_DEFAULT_TRAVERSAL ::xt::layout_type::row_major
|
|
#endif
|
|
|
|
#ifndef XTENSOR_OPENMP_TRESHOLD
|
|
#define XTENSOR_OPENMP_TRESHOLD 0
|
|
#endif
|
|
|
|
#ifndef XTENSOR_TBB_THRESHOLD
|
|
#define XTENSOR_TBB_THRESHOLD 0
|
|
#endif
|
|
|
|
#ifndef XTENSOR_SELECT_ALIGN
|
|
#define XTENSOR_SELECT_ALIGN(T) (XTENSOR_DEFAULT_ALIGNMENT != 0 ? XTENSOR_DEFAULT_ALIGNMENT : alignof(T))
|
|
#endif
|
|
|
|
#ifndef XTENSOR_FIXED_ALIGN
|
|
#define XTENSOR_FIXED_ALIGN XTENSOR_SELECT_ALIGN(void*)
|
|
#endif
|
|
|
|
#ifdef IN_DOXYGEN
|
|
namespace xtl
|
|
{
|
|
template <class... T>
|
|
struct conjunction
|
|
{
|
|
constexpr bool value = true;
|
|
};
|
|
|
|
template <class... C>
|
|
using check_concept = std::enable_if_t<conjunction<C...>::value, int>;
|
|
|
|
#define XTL_REQUIRES(...) xtl::check_concept<__VA_ARGS__> = 0
|
|
}
|
|
#endif
|
|
|
|
#endif
|