summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/function_types/property_tags.hpp')
-rw-r--r--3rdParty/Boost/src/boost/function_types/property_tags.hpp149
1 files changed, 149 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/function_types/property_tags.hpp b/3rdParty/Boost/src/boost/function_types/property_tags.hpp
new file mode 100644
index 0000000..bbc64d5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/function_types/property_tags.hpp
@@ -0,0 +1,149 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#ifndef BOOST_FT_DETAIL_TAGS_HPP_INCLUDED
+#define BOOST_FT_DETAIL_TAGS_HPP_INCLUDED
+
+#include <cstddef>
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/mpl/bitxor.hpp>
+
+
+namespace boost { namespace function_types {
+
+namespace detail
+{
+ typedef long bits_t;
+
+ template<bits_t Value> struct constant
+ : boost::integral_constant<bits_t,Value>
+ { };
+
+ template<bits_t Bits, bits_t Mask> struct property_tag
+ {
+ typedef constant<Bits> bits;
+ typedef constant<Mask> mask;
+ };
+
+ template<typename T> struct bits : T::bits { };
+ template<typename T> struct mask : T::mask { };
+
+ // forward declaration, defined in pp_tags
+ template<bits_t Bits, bits_t CCID> struct encode_bits_impl;
+
+ // forward declaration, defined in pp_tags
+ template<bits_t LHS_bits, bits_t LHS_mask,
+ bits_t RHS_bits, bits_t RHS_mask>
+ struct tag_ice;
+
+ // forward declaration, defined in retag_default_cc
+ template<class Tag, class RegTag = Tag> struct retag_default_cc;
+
+ template<bits_t Bits, bits_t CCID> struct encode_bits
+ : constant<
+ ::boost::function_types::detail::encode_bits_impl<Bits,CCID>::value
+ >
+ { };
+
+ template<class LHS, class RHS> struct compound_tag
+ {
+ typedef constant<
+ ::boost::function_types::detail::tag_ice
+ < ::boost::function_types::detail::bits<LHS>::value
+ , ::boost::function_types::detail::mask<LHS>::value
+ , ::boost::function_types::detail::bits<RHS>::value
+ , ::boost::function_types::detail::mask<RHS>::value
+ >::combined_bits
+ > bits;
+
+ typedef constant<
+ ::boost::function_types::detail::tag_ice
+ < ::boost::function_types::detail::bits<LHS>::value
+ , ::boost::function_types::detail::mask<LHS>::value
+ , ::boost::function_types::detail::bits<RHS>::value
+ , ::boost::function_types::detail::mask<RHS>::value
+ >::combined_mask
+ > mask;
+ };
+
+ template <class Base, class PropOld, class PropNew>
+ struct changed_tag
+ : Base
+ {
+ typedef mpl::bitxor_
+ <typename Base::bits, typename PropOld::bits, typename PropNew::bits>
+ bits;
+ };
+
+ template<class Tag, class QueryTag> struct represents_impl
+ : boost::integral_constant<bool,
+ ::boost::function_types::detail::tag_ice
+ < ::boost::function_types::detail::bits<Tag>::value
+ , ::boost::function_types::detail::mask<Tag>::value
+ , ::boost::function_types::detail::bits<QueryTag>::value
+ , ::boost::function_types::detail::mask<QueryTag>::value
+ >::match
+ >
+ { };
+
+} // namespace detail
+
+typedef detail::property_tag<0,0> null_tag;
+
+template<class Tag1, class Tag2, class Tag3 = null_tag, class Tag4 = null_tag>
+struct tag
+ : detail::compound_tag< detail::compound_tag<Tag1,Tag2>,
+ detail::compound_tag<Tag3,Tag4> >
+{ };
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+template<class Tag1, class Tag2, class Tag3> struct tag<Tag1,Tag2,Tag3,null_tag>
+ : detail::compound_tag<detail::compound_tag<Tag1,Tag2>,Tag3>
+{ };
+template<class Tag1, class Tag2> struct tag<Tag1,Tag2,null_tag,null_tag>
+ : detail::compound_tag<Tag1,Tag2>
+{ };
+template<class Tag1> struct tag<Tag1,null_tag,null_tag,null_tag>
+ : Tag1
+{ };
+#endif
+
+
+template<class Tag, class QueryTag> struct represents
+ : detail::represents_impl<Tag, detail::retag_default_cc<QueryTag,Tag> >
+{ };
+
+
+template<class Tag, class QueryTag> struct extract
+{
+ typedef detail::constant<
+ ::boost::function_types::detail::tag_ice
+ < ::boost::function_types::detail::bits<Tag>::value
+ , ::boost::function_types::detail::mask<Tag>::value
+ , ::boost::function_types::detail::bits<QueryTag>::value
+ , ::boost::function_types::detail::mask<QueryTag>::value
+ >::extracted_bits
+ > bits;
+
+ typedef detail::constant<
+ ::boost::function_types::detail::mask<QueryTag>::value
+ > mask;
+};
+
+} } // namespace ::boost::function_types
+
+#include <boost/function_types/detail/pp_tags/preprocessed.hpp>
+
+namespace boost { namespace function_types {
+#define BOOST_FT_cc_file <boost/function_types/detail/pp_tags/cc_tag.hpp>
+#include <boost/function_types/detail/pp_loop.hpp>
+} } // namespace boost::function_types
+
+#endif
+