diff -r 000000000000 -r bde4ae8d615e os/ossrv/ossrv_pub/boost_apis/boost/mpl/lower_bound.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/ossrv_pub/boost_apis/boost/mpl/lower_bound.hpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,143 @@ + +#ifndef BOOST_MPL_LOWER_BOUND_HPP_INCLUDED +#define BOOST_MPL_LOWER_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. + +// $Source: /cvsroot/boost/boost/boost/mpl/lower_bound.hpp,v $ +// $Date: 2004/09/02 15:40:41 $ +// $Revision: 1.8 $ + +#include +#include +#include +#include + +#if BOOST_WORKAROUND(__BORLANDC__, < 0x600) +# define BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL +#endif + +#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL) +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#else +# include +# include +# include +#endif + +#include + +namespace boost { namespace mpl { + +#if defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_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::type + > +struct lower_bound + : find_if< Sequence, bind1< not_<>, bind2 > > +{ +}; + +#else + +namespace aux { + +template< + typename Distance + , typename Predicate + , typename T + , typename DeferredIterator + > +struct lower_bound_step_impl; + +template< + typename Distance + , typename Predicate + , typename T + , typename DeferredIterator + > +struct lower_bound_step +{ + typedef typename eval_if< + Distance + , lower_bound_step_impl + , DeferredIterator + >::type type; +}; + +template< + typename Distance + , typename Predicate + , typename T + , typename DeferredIterator + > +struct lower_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 + , typename deref::type + , T + >::type cond_; + + typedef typename prior< minus< Distance, offset_> >::type step_; + typedef lower_bound_step< offset_,Predicate,T,DeferredIterator > step_forward_; + typedef lower_bound_step< step_,Predicate,T,next > step_backward_; + typedef typename eval_if< + cond_ + , step_backward_ + , step_forward_ + >::type type; +}; + + +} // namespace aux + +template< + typename BOOST_MPL_AUX_NA_PARAM(Sequence) + , typename BOOST_MPL_AUX_NA_PARAM(T) + , typename Predicate = less<> + > +struct lower_bound +{ + private: + typedef typename lambda::type pred_; + typedef typename size::type size_; + + public: + typedef typename aux::lower_bound_step< + size_,pred_,T,begin + >::type type; +}; + +#endif // BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL + +BOOST_MPL_AUX_NA_SPEC(2, lower_bound) + +}} + +#endif // BOOST_MPL_LOWER_BOUND_HPP_INCLUDED