From dc2493e7525bb7633f697ef10f72b72b46222249 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Fri, 30 Aug 2019 00:45:36 -0400 Subject: Forget what I said, I just need to change git attributes to mark for vendor --- lib/sol2/include/sol/traits.hpp | 708 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 708 insertions(+) create mode 100644 lib/sol2/include/sol/traits.hpp (limited to 'lib/sol2/include/sol/traits.hpp') diff --git a/lib/sol2/include/sol/traits.hpp b/lib/sol2/include/sol/traits.hpp new file mode 100644 index 0000000..b47fdc9 --- /dev/null +++ b/lib/sol2/include/sol/traits.hpp @@ -0,0 +1,708 @@ +// sol3 + +// The MIT License (MIT) + +// Copyright (c) 2013-2019 Rapptz, ThePhD and contributors + +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#ifndef SOL_TRAITS_HPP +#define SOL_TRAITS_HPP + +#include "tuple.hpp" +#include "bind_traits.hpp" +#include "pointer_like.hpp" +#include "base_traits.hpp" +#include "string_view.hpp" + +#include +#include +#include +#include +#include +#include +#include + + +namespace sol { + namespace meta { + template + struct unwrapped { + typedef T type; + }; + + template + struct unwrapped> { + typedef T type; + }; + + template + using unwrapped_t = typename unwrapped::type; + + template + struct unwrap_unqualified : unwrapped> {}; + + template + using unwrap_unqualified_t = typename unwrap_unqualified::type; + + template + struct remove_member_pointer; + + template + struct remove_member_pointer { + typedef R type; + }; + + template + struct remove_member_pointer { + typedef R type; + }; + + template + using remove_member_pointer_t = remove_member_pointer; + + template + struct all_same : std::true_type {}; + + template + struct all_same : std::integral_constant::value && all_same::value> {}; + + template + struct any_same : std::false_type {}; + + template + struct any_same : std::integral_constant::value || any_same::value> {}; + + template + constexpr inline bool any_same_v = any_same::value; + + template + using boolean = std::integral_constant; + + template + constexpr inline bool boolean_v = boolean::value; + + template + using neg = boolean; + + template + constexpr inline bool neg_v = neg::value; + + template + struct all : boolean {}; + + template + struct all : std::conditional_t, boolean> {}; + + template + struct any : boolean {}; + + template + struct any : std::conditional_t, any> {}; + + template + constexpr inline bool all_v = all::value; + + template + constexpr inline bool any_v = any::value; + + enum class enable_t { _ }; + + constexpr const auto enabler = enable_t::_; + + template + using disable_if_t = std::enable_if_t; + + template + using enable = std::enable_if_t::value, enable_t>; + + template + using disable = std::enable_if_t>::value, enable_t>; + + template + using enable_any = std::enable_if_t::value, enable_t>; + + template + using disable_any = std::enable_if_t>::value, enable_t>; + + template + struct find_in_pack_v : boolean {}; + + template + struct find_in_pack_v : any, find_in_pack_v> {}; + + namespace meta_detail { + template + struct index_in_pack : std::integral_constant {}; + + template + struct index_in_pack + : conditional_t::value, std::integral_constant, index_in_pack> {}; + } // namespace meta_detail + + template + struct index_in_pack : meta_detail::index_in_pack<0, T, Args...> {}; + + template + struct index_in : meta_detail::index_in_pack<0, T, List> {}; + + template + struct index_in> : meta_detail::index_in_pack<0, T, Args...> {}; + + template + struct at_in_pack {}; + + template + using at_in_pack_t = typename at_in_pack::type; + + template + struct at_in_pack : std::conditional> {}; + + template + struct at_in_pack<0, Arg, Args...> { + typedef Arg type; + }; + + namespace meta_detail { + template + using on_even = meta::boolean<(TI::value % 2) == 0>; + + template + using on_odd = meta::boolean<(TI::value % 2) == 1>; + + template + using on_always = std::true_type; + + template