--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imglib/boostlibrary/boost/mpl/upper_bound.hpp Mon May 10 19:54:49 2010 +0100
@@ -0,0 +1,141 @@
+
+#ifndef BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
+#define BOOST_MPL_UPPER_BOUND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-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.
+
+// $Id: upper_bound.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+# define BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL
+#endif
+
+#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)
+# include <boost/mpl/minus.hpp>
+# include <boost/mpl/divides.hpp>
+# include <boost/mpl/size.hpp>
+# include <boost/mpl/advance.hpp>
+# include <boost/mpl/begin_end.hpp>
+# include <boost/mpl/long.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/prior.hpp>
+# include <boost/mpl/deref.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#else
+# include <boost/mpl/find.hpp>
+# include <boost/mpl/bind.hpp>
+#endif
+
+#include <boost/config.hpp>
+
+namespace boost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL)
+
+// agurt 23/oct/02: has a wrong complexity etc., but at least it works;
+// feel free to contribute a better implementation!
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ , typename Predicate = less<>
+ , typename pred_ = typename lambda<Predicate>::type
+ >
+struct upper_bound
+ : find_if< Sequence, bind2<pred_,T,_> >
+{
+};
+
+#else
+
+namespace aux {
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct upper_bound_step_impl;
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct upper_bound_step
+{
+ typedef typename eval_if<
+ Distance
+ , upper_bound_step_impl<Distance,Predicate,T,DeferredIterator>
+ , DeferredIterator
+ >::type type;
+};
+
+template<
+ typename Distance
+ , typename Predicate
+ , typename T
+ , typename DeferredIterator
+ >
+struct upper_bound_step_impl
+{
+ typedef typename divides< Distance, long_<2> >::type offset_;
+ typedef typename DeferredIterator::type iter_;
+ typedef typename advance< iter_,offset_ >::type middle_;
+ typedef typename apply2<
+ Predicate
+ , T
+ , typename deref<middle_>::type
+ >::type cond_;
+
+ typedef typename prior< minus< Distance, offset_ > >::type step_;
+ typedef upper_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_;
+ typedef upper_bound_step< step_,Predicate,T,next<middle_> > step_backward_;
+ typedef typename eval_if<
+ cond_
+ , step_forward_
+ , step_backward_
+ >::type type;
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ , typename Predicate = less<>
+ >
+struct upper_bound
+{
+ private:
+ typedef typename lambda<Predicate>::type pred_;
+ typedef typename size<Sequence>::type size_;
+
+ public:
+ typedef typename aux::upper_bound_step<
+ size_,pred_,T,begin<Sequence>
+ >::type type;
+};
+
+#endif // BOOST_MPL_CFG_STRIPPED_DOWN_UPPER_BOUND_IMPL
+
+BOOST_MPL_AUX_NA_SPEC(2, upper_bound)
+
+}}
+
+#endif // BOOST_MPL_UPPER_BOUND_HPP_INCLUDED