mirror of https://github.com/trapexit/mergerfs.git
committed by
trapexit
17 changed files with 227 additions and 343 deletions
-
5vendored/boost/config/stdlib/libcpp.hpp
-
13vendored/boost/container_hash/hash.hpp
-
4vendored/boost/container_hash/hash_fwd.hpp
-
57vendored/boost/container_hash/hash_is_avalanching.hpp
-
58vendored/boost/core/bit.hpp
-
42vendored/boost/core/detail/static_assert.hpp
-
8vendored/boost/describe/detail/config.hpp
-
2vendored/boost/describe/modifiers.hpp
-
10vendored/boost/detail/workaround.hpp
-
2vendored/boost/mp11/algorithm.hpp
-
34vendored/boost/mp11/detail/mp_map_find.hpp
-
2vendored/boost/mp11/version.hpp
-
181vendored/boost/static_assert.hpp
-
10vendored/boost/unordered/detail/foa/core.hpp
-
68vendored/boost/unordered/detail/unordered_printers.hpp
-
70vendored/boost/unordered/hash_traits.hpp
-
4vendored/boost/version.hpp
@ -0,0 +1,57 @@ |
|||
// Copyright 2025 Joaquin M Lopez Munoz.
|
|||
// Distributed under the Boost Software License, Version 1.0.
|
|||
// https://www.boost.org/LICENSE_1_0.txt
|
|||
|
|||
#ifndef BOOST_HASH_HASH_IS_AVALANCHING_HPP_INCLUDED
|
|||
#define BOOST_HASH_HASH_IS_AVALANCHING_HPP_INCLUDED
|
|||
|
|||
#include <type_traits>
|
|||
|
|||
namespace boost |
|||
{ |
|||
namespace hash_detail |
|||
{ |
|||
|
|||
template<class... Ts> struct make_void |
|||
{ |
|||
using type = void; |
|||
}; |
|||
|
|||
template<class... Ts> using void_t = typename make_void<Ts...>::type; |
|||
|
|||
template<class IsAvalanching> struct avalanching_value |
|||
{ |
|||
static constexpr bool value = IsAvalanching::value; |
|||
}; |
|||
|
|||
// may be explicitly marked as BOOST_DEPRECATED in the future
|
|||
template<> struct avalanching_value<void> |
|||
{ |
|||
static constexpr bool value = true; |
|||
}; |
|||
|
|||
template<class Hash, class = void> struct hash_is_avalanching_impl: std::false_type |
|||
{ |
|||
}; |
|||
|
|||
template<class Hash> struct hash_is_avalanching_impl<Hash, void_t<typename Hash::is_avalanching> >: |
|||
std::integral_constant<bool, avalanching_value<typename Hash::is_avalanching>::value> |
|||
{ |
|||
}; |
|||
|
|||
template<class Hash> |
|||
struct hash_is_avalanching_impl<Hash, typename std::enable_if< ((void)Hash::is_avalanching, true) >::type> |
|||
{ |
|||
// Hash::is_avalanching is not a type: we don't define value to produce
|
|||
// a compile error downstream
|
|||
}; |
|||
|
|||
} // namespace hash_detail
|
|||
|
|||
template<class Hash> struct hash_is_avalanching: hash_detail::hash_is_avalanching_impl<Hash>::type |
|||
{ |
|||
}; |
|||
|
|||
} // namespace boost
|
|||
|
|||
#endif // #ifndef BOOST_HASH_HASH_IS_AVALANCHING_HPP_INCLUDED
|
|||
@ -0,0 +1,42 @@ |
|||
#ifndef BOOST_CORE_DETAIL_STATIC_ASSERT_HPP_INCLUDED
|
|||
#define BOOST_CORE_DETAIL_STATIC_ASSERT_HPP_INCLUDED
|
|||
|
|||
// Copyright 2025 Peter Dimov
|
|||
// Distributed under the Boost Software License, Version 1.0.
|
|||
// https://www.boost.org/LICENSE_1_0.txt
|
|||
|
|||
#if defined(__cpp_static_assert) && __cpp_static_assert >= 200410L
|
|||
|
|||
#define BOOST_CORE_STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
|
|||
|
|||
#else
|
|||
|
|||
#include <boost/config.hpp>
|
|||
#include <cstddef>
|
|||
|
|||
namespace boost |
|||
{ |
|||
namespace core |
|||
{ |
|||
|
|||
template<bool> struct STATIC_ASSERTION_FAILURE; |
|||
|
|||
template<> struct STATIC_ASSERTION_FAILURE<true> |
|||
{ |
|||
}; |
|||
|
|||
template<std::size_t> struct static_assert_test |
|||
{ |
|||
}; |
|||
|
|||
} // namespace core
|
|||
} // namespace boost
|
|||
|
|||
#define BOOST_CORE_STATIC_ASSERT(expr) \
|
|||
typedef ::boost::core::static_assert_test< \ |
|||
sizeof( ::boost::core::STATIC_ASSERTION_FAILURE<(expr)? true: false> ) \ |
|||
> BOOST_JOIN(boost_static_assert_typedef_,__LINE__) BOOST_ATTRIBUTE_UNUSED |
|||
|
|||
#endif
|
|||
|
|||
#endif // #ifndef BOOST_CORE_DETAIL_STATIC_ASSERT_HPP_INCLUDED
|
|||
@ -1,10 +0,0 @@ |
|||
// Copyright David Abrahams 2002.
|
|||
// Distributed under the Boost Software License, Version 1.0. (See
|
|||
// accompanying file LICENSE_1_0.txt or copy at
|
|||
// http://www.boost.org/LICENSE_1_0.txt)
|
|||
#ifndef BOOST_WORKAROUND_DWA2002126_HPP
|
|||
#define BOOST_WORKAROUND_DWA2002126_HPP
|
|||
|
|||
#include <boost/config/workaround.hpp>
|
|||
|
|||
#endif // BOOST_WORKAROUND_DWA2002126_HPP
|
|||
@ -1,181 +0,0 @@ |
|||
// (C) Copyright John Maddock 2000.
|
|||
// Use, modification and distribution are subject to the
|
|||
// Boost Software License, Version 1.0. (See accompanying file
|
|||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|||
|
|||
// See http://www.boost.org/libs/static_assert for documentation.
|
|||
|
|||
/*
|
|||
Revision history: |
|||
02 August 2000 |
|||
Initial version. |
|||
*/ |
|||
|
|||
#ifndef BOOST_STATIC_ASSERT_HPP
|
|||
#define BOOST_STATIC_ASSERT_HPP
|
|||
|
|||
#include <boost/config.hpp>
|
|||
#include <boost/detail/workaround.hpp>
|
|||
#include <cstddef> //for std::size_t
|
|||
|
|||
#if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
|
|||
//
|
|||
// This is horrible, but it seems to be the only we can shut up the
|
|||
// "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
|
|||
// warning that get spewed out otherwise in non-C++11 mode.
|
|||
//
|
|||
#pragma GCC system_header
|
|||
#endif
|
|||
|
|||
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
|
|||
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|||
# define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
|
|||
# else
|
|||
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert( B, Msg )
|
|||
# endif
|
|||
#else
|
|||
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
|
|||
#endif
|
|||
|
|||
#ifdef BOOST_BORLANDC
|
|||
//
|
|||
// workaround for buggy integral-constant expression support:
|
|||
#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS
|
|||
#endif
|
|||
|
|||
#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4))
|
|||
// gcc 3.3 and 3.4 don't produce good error messages with the default version:
|
|||
# define BOOST_SA_GCC_WORKAROUND
|
|||
#endif
|
|||
|
|||
//
|
|||
// If the compiler issues warnings about old C style casts,
|
|||
// then enable this:
|
|||
//
|
|||
#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))
|
|||
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|||
# define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) ((__VA_ARGS__) != 0)
|
|||
# else
|
|||
# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) != 0)
|
|||
# endif
|
|||
#else
|
|||
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|||
# define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) (bool)(__VA_ARGS__)
|
|||
# else
|
|||
# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
|
|||
# endif
|
|||
#endif
|
|||
|
|||
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
|
|||
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|||
# define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
|
|||
# else
|
|||
# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
|
|||
# endif
|
|||
#else
|
|||
|
|||
namespace boost{ |
|||
|
|||
// HP aCC cannot deal with missing names for template value parameters
|
|||
template <bool x> struct STATIC_ASSERTION_FAILURE; |
|||
|
|||
template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; }; |
|||
|
|||
// HP aCC cannot deal with missing names for template value parameters
|
|||
template<std::size_t x> struct static_assert_test{}; |
|||
|
|||
} |
|||
|
|||
//
|
|||
// Implicit instantiation requires that all member declarations be
|
|||
// instantiated, but that the definitions are *not* instantiated.
|
|||
//
|
|||
// It's not particularly clear how this applies to enum's or typedefs;
|
|||
// both are described as declarations [7.1.3] and [7.2] in the standard,
|
|||
// however some compilers use "delayed evaluation" of one or more of
|
|||
// these when implicitly instantiating templates. We use typedef declarations
|
|||
// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum
|
|||
// version gets better results from your compiler...
|
|||
//
|
|||
// Implementation:
|
|||
// Both of these versions rely on sizeof(incomplete_type) generating an error
|
|||
// message containing the name of the incomplete type. We use
|
|||
// "STATIC_ASSERTION_FAILURE" as the type name here to generate
|
|||
// an eye catching error message. The result of the sizeof expression is either
|
|||
// used as an enum initialiser, or as a template argument depending which version
|
|||
// is in use...
|
|||
// Note that the argument to the assert is explicitly cast to bool using old-
|
|||
// style casts: too many compilers currently have problems with static_cast
|
|||
// when used inside integral constant expressions.
|
|||
//
|
|||
#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)
|
|||
|
|||
#if defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
|
|||
#define BOOST_STATIC_ASSERT( B ) \
|
|||
typedef ::boost::static_assert_test<\ |
|||
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\ |
|||
BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__) |
|||
#elif defined(BOOST_MSVC)
|
|||
#define BOOST_STATIC_ASSERT(...) \
|
|||
typedef ::boost::static_assert_test<\ |
|||
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST (__VA_ARGS__) >)>\ |
|||
BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__) |
|||
#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
|
|||
// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
|
|||
// instead of warning in case of failure
|
|||
# define BOOST_STATIC_ASSERT( B ) \
|
|||
typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \ |
|||
[ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ] |
|||
#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && !defined(BOOST_NO_CXX11_VARIADIC_MACROS)
|
|||
// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
|
|||
// instead of warning in case of failure
|
|||
# define BOOST_STATIC_ASSERT(...) \
|
|||
typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \ |
|||
[ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >::value ] |
|||
#elif defined(__sgi)
|
|||
// special version for SGI MIPSpro compiler
|
|||
#define BOOST_STATIC_ASSERT( B ) \
|
|||
BOOST_STATIC_CONSTANT(bool, \ |
|||
BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \ |
|||
typedef ::boost::static_assert_test<\ |
|||
sizeof(::boost::STATIC_ASSERTION_FAILURE< \ |
|||
BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\ |
|||
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) |
|||
#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
|
|||
// special version for CodeWarrior <= 8.x
|
|||
#define BOOST_STATIC_ASSERT( B ) \
|
|||
BOOST_STATIC_CONSTANT(int, \ |
|||
BOOST_JOIN(boost_static_assert_test_, __LINE__) = \ |
|||
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) ) |
|||
#else
|
|||
// generic version
|
|||
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|||
# define BOOST_STATIC_ASSERT( ... ) \
|
|||
typedef ::boost::static_assert_test<\ |
|||
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\ |
|||
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED |
|||
# else
|
|||
# define BOOST_STATIC_ASSERT( B ) \
|
|||
typedef ::boost::static_assert_test<\ |
|||
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\ |
|||
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED |
|||
# endif
|
|||
#endif
|
|||
|
|||
#else
|
|||
// alternative enum based implementation:
|
|||
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
|
|||
# define BOOST_STATIC_ASSERT( ... ) \
|
|||
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \ |
|||
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( __VA_ARGS__ ) >) } |
|||
# else
|
|||
# define BOOST_STATIC_ASSERT(B) \
|
|||
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \ |
|||
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) } |
|||
# endif
|
|||
#endif
|
|||
#endif // defined(BOOST_NO_CXX11_STATIC_ASSERT)
|
|||
|
|||
#endif // BOOST_STATIC_ASSERT_HPP
|
|||
|
|||
|
|||
@ -1,70 +0,0 @@ |
|||
/* Hash function characterization.
|
|||
* |
|||
* Copyright 2022-2024 Joaquin M Lopez Munoz. |
|||
* Distributed under the Boost Software License, Version 1.0. |
|||
* (See accompanying file LICENSE_1_0.txt or copy at |
|||
* http://www.boost.org/LICENSE_1_0.txt)
|
|||
* |
|||
* See https://www.boost.org/libs/unordered for library home page.
|
|||
*/ |
|||
|
|||
#ifndef BOOST_UNORDERED_HASH_TRAITS_HPP
|
|||
#define BOOST_UNORDERED_HASH_TRAITS_HPP
|
|||
|
|||
#include <boost/unordered/detail/type_traits.hpp>
|
|||
|
|||
namespace boost{ |
|||
namespace unordered{ |
|||
|
|||
namespace detail{ |
|||
|
|||
template<typename Hash,typename=void> |
|||
struct hash_is_avalanching_impl:std::false_type{}; |
|||
|
|||
template<typename IsAvalanching> |
|||
struct avalanching_value |
|||
{ |
|||
static constexpr bool value=IsAvalanching::value; |
|||
}; |
|||
|
|||
/* may be explicitly marked as BOOST_DEPRECATED in the future */ |
|||
template<> struct avalanching_value<void> |
|||
{ |
|||
static constexpr bool value=true; |
|||
}; |
|||
|
|||
template<typename Hash> |
|||
struct hash_is_avalanching_impl< |
|||
Hash, |
|||
boost::unordered::detail::void_t<typename Hash::is_avalanching> |
|||
>:std::integral_constant< |
|||
bool, |
|||
avalanching_value<typename Hash::is_avalanching>::value |
|||
>{}; |
|||
|
|||
template<typename Hash> |
|||
struct hash_is_avalanching_impl< |
|||
Hash, |
|||
typename std::enable_if<((void)Hash::is_avalanching,true)>::type |
|||
>{}; /* Hash::is_avalanching is not a type: compile error downstream */ |
|||
|
|||
} /* namespace detail */ |
|||
|
|||
/* Each trait can be partially specialized by users for concrete hash functions
|
|||
* when actual characterization differs from default. |
|||
*/ |
|||
|
|||
/* hash_is_avalanching<Hash>::value is:
|
|||
* - false if Hash::is_avalanching is not present. |
|||
* - Hash::is_avalanching::value if this is present and constexpr-convertible |
|||
* to a bool. |
|||
* - true if Hash::is_avalanching is void (deprecated). |
|||
* - ill-formed otherwise. |
|||
*/ |
|||
template<typename Hash> |
|||
struct hash_is_avalanching: detail::hash_is_avalanching_impl<Hash>::type{}; |
|||
|
|||
} /* namespace unordered */ |
|||
} /* namespace boost */ |
|||
|
|||
#endif
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue