lower_bound.hpp
来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 144 行
HPP
144 行
#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/CGAL/Packages/Boost/include/boost/mpl/lower_bound.hpp,v $// $Date: 2004/11/20 10:39:22 $// $Revision: 1.1.1.2 $#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__, < 0x600)# define BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPL#endif#if !defined(BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_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/not.hpp># 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_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<Predicate>::type >struct lower_bound : find_if< Sequence, bind1< not_<>, bind2<pred_,_,T> > >{};#elsenamespace 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<Distance,Predicate,T,DeferredIterator> , 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<middle_>::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<middle_> > step_backward_; typedef typename eval_if< cond_ , step_backward_ , step_forward_ >::type type;};} // namespace auxtemplate< typename BOOST_MPL_AUX_NA_PARAM(Sequence) , typename BOOST_MPL_AUX_NA_PARAM(T) , typename Predicate = less<> >struct lower_bound{ private: typedef typename lambda<Predicate>::type pred_; typedef typename size<Sequence>::type size_; public: typedef typename aux::lower_bound_step< size_,pred_,T,begin<Sequence> >::type type;};#endif // BOOST_MPL_CFG_STRIPPED_DOWN_LOWER_BOUND_IMPLBOOST_MPL_AUX_NA_SPEC(2, lower_bound)}}#endif // BOOST_MPL_LOWER_BOUND_HPP_INCLUDED
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?