Index: third_party/boost/boost/mpl/vector/aux_/at.hpp |
diff --git a/third_party/boost/boost/mpl/vector/aux_/at.hpp b/third_party/boost/boost/mpl/vector/aux_/at.hpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3a950df3f86d48233387dfd10ea9423d550b63c0 |
--- /dev/null |
+++ b/third_party/boost/boost/mpl/vector/aux_/at.hpp |
@@ -0,0 +1,116 @@ |
+ |
+#ifndef BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED |
+#define BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED |
+ |
+// Copyright Aleksey Gurtovoy 2000-2004 |
+// |
+// 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 http://www.boost.org/libs/mpl for documentation. |
+ |
+// $Source$ |
+// $Date: 2004-12-20 14:35:33 -0500 (Mon, 20 Dec 2004) $ |
+// $Revision: 26560 $ |
+ |
+#include <boost/mpl/at_fwd.hpp> |
+#include <boost/mpl/vector/aux_/tag.hpp> |
+#include <boost/mpl/long.hpp> |
+#include <boost/mpl/void.hpp> |
+#include <boost/mpl/aux_/nttp_decl.hpp> |
+#include <boost/mpl/aux_/type_wrapper.hpp> |
+#include <boost/mpl/aux_/value_wknd.hpp> |
+#include <boost/mpl/aux_/config/typeof.hpp> |
+#include <boost/mpl/aux_/config/ctps.hpp> |
+ |
+namespace boost { namespace mpl { |
+ |
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) |
+ |
+template< typename Vector, long n_ > |
+struct v_at_impl |
+{ |
+ typedef long_< (Vector::lower_bound_::value + n_) > index_; |
+ typedef __typeof__( Vector::item_(index_()) ) type; |
+}; |
+ |
+ |
+template< typename Vector, long n_ > |
+struct v_at |
+ : aux::wrapped_type< typename v_at_impl<Vector,n_>::type > |
+{ |
+}; |
+ |
+template<> |
+struct at_impl< aux::vector_tag > |
+{ |
+ template< typename Vector, typename N > struct apply |
+ : v_at< |
+ Vector |
+ , BOOST_MPL_AUX_VALUE_WKND(N)::value |
+ > |
+ { |
+ }; |
+}; |
+ |
+#else |
+ |
+# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ |
+ && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) |
+ |
+template< typename Vector, BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at; |
+ |
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) > |
+struct at_impl< aux::vector_tag<n_> > |
+{ |
+ template< typename Vector, typename N > struct apply |
+#if !defined(__BORLANDC__) |
+ : v_at< |
+ Vector |
+ , BOOST_MPL_AUX_VALUE_WKND(N)::value |
+ > |
+ { |
+#else |
+ { |
+ typedef typename v_at< |
+ Vector |
+ , BOOST_MPL_AUX_VALUE_WKND(N)::value |
+ >::type type; |
+#endif |
+ }; |
+}; |
+ |
+# else |
+ |
+namespace aux { |
+ |
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at_impl |
+{ |
+ template< typename V > struct result_; |
+}; |
+ |
+// to work around ETI, etc. |
+template<> struct v_at_impl<-1> |
+{ |
+ template< typename V > struct result_ |
+ { |
+ typedef void_ type; |
+ }; |
+}; |
+ |
+} // namespace aux |
+ |
+template< typename T, BOOST_MPL_AUX_NTTP_DECL(long, n_) > |
+struct v_at |
+ : aux::v_at_impl<n_>::template result_<T> |
+{ |
+}; |
+ |
+# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION |
+ |
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES |
+ |
+}} |
+ |
+#endif // BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED |