⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 token_iterator.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
📖 第 1 页 / 共 2 页
字号:
public:    // Constructor    explicit    token_iterator_base()    : m_is_dropped( use_isspace ),      m_is_kept( use_ispunct ),      m_keep_empty_tokens( false ),      m_token_produced( false )    {    }protected:    template<typename Modifier>    token_iterator_base&    use( Modifier const& m )    {        m.apply( m_is_dropped, m_is_kept, m_keep_empty_tokens );        return *this;    }    template<typename Iter>     bool                    get( Iter& begin, Iter end )    {        typedef ut_detail::token_assigner<BOOST_DEDUCED_TYPENAME iterator_traversal<Iter>::type> Assigner;        Iter checkpoint;        Assigner::clear( this->m_value );        if( !m_keep_empty_tokens ) {            while( begin != end && m_is_dropped( *begin ) )                ++begin;            if( begin == end )                return false;            checkpoint = begin;            if( m_is_kept( *begin ) )                Assigner::append_move( begin, this->m_value );            else                while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )                    Assigner::append_move( begin, this->m_value );        }         else { // m_keep_empty_tokens ia true            checkpoint = begin;            if( begin == end ) {                if( m_token_produced )                     return false;                m_token_produced = true;            }            else if( m_is_kept( *begin ) ) {                if( m_token_produced )                     Assigner::append_move( begin, this->m_value );                m_token_produced = !m_token_produced;            }             else if( !m_token_produced && m_is_dropped( *begin ) )                m_token_produced = true;            else {                if( m_is_dropped( *begin ) )                    checkpoint = ++begin;                while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )                    Assigner::append_move( begin, this->m_value );                m_token_produced = true;            }        }        Assigner::assign( checkpoint, begin, this->m_value );        return true;    }private:    // Data members    delim_policy            m_is_dropped;    delim_policy            m_is_kept;    bool                    m_keep_empty_tokens;    bool                    m_token_produced;};// ************************************************************************** //// **************          basic_string_token_iterator         ************** //// ************************************************************************** //template<typename CharT,         typename CharCompare = ut_detail::default_char_compare<CharT> >class basic_string_token_iterator: public token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> {    typedef basic_cstring<CharT const> cstring;    typedef token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> base;public:    explicit    basic_string_token_iterator() {}    explicit    basic_string_token_iterator( cstring src )    : m_src( src )    {        this->init();    }    template<typename Src, typename M1>    basic_string_token_iterator( Src src, M1 const& m1 )    : m_src( src )    {        this->use( m1 );        this->init();    }    template<typename Src, typename M1, typename M2>    basic_string_token_iterator( Src src, M1 const& m1, M2 const& m2 )    : m_src( src )    {        this->use( m1 );        this->use( m2 );        this->init();    }    template<typename Src, typename M1, typename M2, typename M3>    basic_string_token_iterator( Src src, M1 const& m1, M2 const& m2, M3 const& m3 )    : m_src( src )    {        this->use( m1 );        this->use( m2 );        this->use( m3 );        this->init();    }private:    friend class input_iterator_core_access;    // input iterator implementation    bool        get()    {        typename cstring::iterator begin = m_src.begin();        bool res = base::get( begin, m_src.end() );        m_src.assign( begin, m_src.end() );        return res;    }    // Data members    cstring     m_src;};typedef basic_string_token_iterator<char>       string_token_iterator;typedef basic_string_token_iterator<wchar_t>    wstring_token_iterator;// ************************************************************************** //// **************              range_token_iterator            ************** //// ************************************************************************** //template<typename Iter,         typename CharCompare = ut_detail::default_char_compare<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,         typename ValueType   = std::basic_string<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,         typename Reference   = ValueType const&>class range_token_iterator: public token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,                             typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> {    typedef basic_cstring<typename ValueType::value_type> cstring;    typedef token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,                                typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> base;public:    explicit    range_token_iterator() {}    explicit    range_token_iterator( Iter begin, Iter end = Iter() )    : m_begin( begin ), m_end( end )    {        this->init();    }    template<typename M1>    range_token_iterator( Iter begin, Iter end, M1 const& m1 )    : m_begin( begin ), m_end( end )    {        this->use( m1 );        this->init();    }    template<typename M1,typename M2>    range_token_iterator( Iter begin, Iter end, M1 const& m1, M2 const& m2 )    : m_begin( begin ), m_end( end )    {        this->use( m1 );        this->use( m2 );        this->init();    }    template<typename M1,typename M2,typename M3>    range_token_iterator( Iter begin, Iter end, M1 const& m1, M2 const& m2, M3 const& m3 )    : m_begin( begin ), m_end( end )    {        this->use( m1 );        this->use( m2 );        this->use( m3 );        this->init();    }private:    friend class input_iterator_core_access;    // input iterator implementation    bool        get()    {        return base::get( m_begin, m_end );    }    // Data members    Iter m_begin;    Iter m_end;};// ************************************************************************** //// **************            make_range_token_iterator         ************** //// ************************************************************************** //template<typename Iter>inline range_token_iterator<Iter>make_range_token_iterator( Iter begin, Iter end = Iter() ){    return range_token_iterator<Iter>( begin, end );}//____________________________________________________________________________//template<typename Iter,typename M1>inline range_token_iterator<Iter>make_range_token_iterator( Iter begin, Iter end, M1 const& m1 ){    return range_token_iterator<Iter>( begin, end, m1 );}//____________________________________________________________________________//template<typename Iter, typename M1, typename M2>inline range_token_iterator<Iter>make_range_token_iterator( Iter begin, Iter end, M1 const& m1, M2 const& m2 ){    return range_token_iterator<Iter>( begin, end, m1, m2 );}//____________________________________________________________________________//template<typename Iter,typename M1, typename M2, typename M3>inline range_token_iterator<Iter>make_range_token_iterator( Iter begin, Iter end, M1 const& m1, M2 const& m2, M3 const& m3 ){    return range_token_iterator<Iter>( begin, end, m1, m2, m3 );}//____________________________________________________________________________//} // namespace unit_test} // namespace boost// ***************************************************************************//  Revision History ://  //  $Log: token_iterator.hpp,v $//  Revision 1.1.1.1  2004/11/20 10:52:25  spion//  Import of Boost v. 1.32.0////  Revision 1.7.2.1  2004/10/30 11:34:27  agurtovoy//  MSVC/Borland fixes////  Revision 1.7  2004/10/01 10:50:40  rogeeff//  gcc 2.95 workarounds////  Revision 1.6  2004/09/27 08:38:08  rogeeff//  msvc workaround////  Revision 1.5  2004/09/19 09:22:13  rogeeff//  ios fix for classic iostreams////  Revision 1.4  2004/07/20 12:46:39  vladimir_prus//  Add "this->", since gcc 3.4 has two-phase lookup.////  Revision 1.3  2004/07/19 12:29:57  rogeeff//  guard rename//  mingw port////  Revision 1.2  2004/06/07 07:33:50  rogeeff//  detail namespace renamed////  Revision 1.1  2004/06/05 11:03:12  rogeeff//  input_iterator_adaptor simplified//  token_iterator added//// ***************************************************************************#endif // BOOST_TOKEN_ITERATOR_HPP_071894GER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -