亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? iterators.hpp

?? 著名的Parser庫Spirit在VC6上的Port
?? HPP
字號:
/*=============================================================================
    Iterators

    Spirit V1.3.1
    Copyright (c) 2001, Joel de Guzman

    This software is provided 'as-is', without any express or implied
    warranty. In no event will the copyright holder be held liable for
    any damages arising from the use of this software.

    Permission is granted to anyone to use this software for any purpose,
    including commercial applications, and to alter it and redistribute
    it freely, subject to the following restrictions:

    1.  The origin of this software must not be misrepresented; you must
        not claim that you wrote the original software. If you use this
        software in a product, an acknowledgment in the product documentation
        would be appreciated but is not required.

    2.  Altered source versions must be plainly marked as such, and must
        not be misrepresented as being the original software.

    3.  This notice may not be removed or altered from any source
        distribution.

    Acknowledgements:

        Special thanks to Dan Nuffer, John (EBo) David, Chris Uzdavinis,
        and Doug Gregor. These people are most instrumental in steering
        Spirit in the right direction.

        Special thanks also to people who have contributed to the code base
        and sample code, ported Spirit to various platforms and compilers,
        gave suggestions, reported and provided bug fixes. Alexander
        Hirner, Andy Elvey, Bogdan Kushnir, Brett Calcott, Bruce Florman,
        Changzhe Han, Colin McPhail, Hakki Dogusan, Jan Bares, Joseph
        Smith, Martijn W. van der Lee, Raghavendra Satish, Remi Delcos, Tom
        Spilman, Vladimir Prus, W. Scott Dillman, David A. Greene, Bob
        Bailey, Hartmut Kaiser.

        Finally special thanks also to people who gave feedback and
        valuable comments, particularly members of Spirit's Source Forge
        mailing list and boost.org.

    URL: http://spirit.sourceforge.net/

=============================================================================*/
#ifndef SPIRIT_ITERATORS_HPP
#define SPIRIT_ITERATORS_HPP

///////////////////////////////////////////////////////////////////////////////

#include "boost/spirit/MSVC/ps_helper.hpp"

///////////////////////////////////////////////////////////////////////////////

namespace spirit {

//////////////////////////////////
namespace impl {

    template <typename IteratorTag> struct iterator_kind
    { /* At least a forward iterator is required */ };

    template <> struct iterator_kind<std::forward_iterator_tag>
    { typedef std::forward_iterator_tag T; };

    template <> struct iterator_kind<std::bidirectional_iterator_tag>
    { typedef std::forward_iterator_tag T; };

    template <> struct iterator_kind<std::random_access_iterator_tag>
    { typedef std::forward_iterator_tag T; };

} // namespace impl

///////////////////////////////////////////////////////////////////////////////
//
//  scanner class
//
//      The scanner wraps an iterator and a skip-parser. The skipper
//      handles the skipping of characters in between words that form
//      sentences in a language. The scanner extracts data from the
//      input stream and filters this data to exclude skip- characters
//      as recognized by the skipper. The scanner invokes the skipper
//      filter when tasked to scan the next character from the input.
//      The scanner conforms to a standard STL forward iterator.
//
//      The scanner is not a full-blown lexical analyzer. It does not
//      extract tokens such as reserved words and operators. Nor does it
//      extract numbers and literal strings
//
///////////////////////////////////////////////////////////////////////////////
template <typename IteratorT = char const*,
          typename MatchTraitsT = match_traits, 
	  typename SkipT = skipper<IteratorT, MatchTraitsT>
	 >  
class scanner {

public:

    typedef IteratorT   iterator_type;
    typedef IteratorT  iterator_without_scanner;
    typedef SkipT       skip_type;

    typedef scanner<IteratorT, MatchTraitsT, SkipT> self_; 

#if defined (BOOST_MSVC)
    typedef spirit::iterator_traits<IteratorT> iterator_traits_;
#else
    typedef std::iterator_traits<IteratorT> iterator_traits_;
#endif

    typedef typename iterator_traits_::iterator_category category;
    typedef typename impl::iterator_kind<category>::T iterator_category;
    typedef typename iterator_traits_::difference_type   difference_type;
    typedef typename iterator_traits_::pointer           pointer;
    typedef typename iterator_traits_::reference         reference;
    typedef typename iterator_traits_::value_type        value_type;

    scanner(iterator_type const& iter_, SkipT const* skip_);

    self_& operator=(iterator_type const& iter_);

    IteratorT           iterator() const;
    value_type          operator*() const;
    pointer             operator->() const;
    self_&            operator++();
    self_             operator++(int);

    bool                operator==(self_ const& other) const;
    bool                operator!=(self_ const& other) const;

private:

    void                next() const;
    IteratorT           get() const;

    SkipT const*        skip;
    mutable IteratorT   iter;
    mutable bool        dirty;
};

///////////////////////////////////////////////////////////////////////////////
//
//  nocase_iterator class
//
//      The nocase_iterator class adapts an iterator and converts
//      all upper-case characters from the input to lower-case. The
//      nocase_iterator conforms to a standard STL forward iterator.
//
///////////////////////////////////////////////////////////////////////////////
template <typename IteratorT>
class nocase_iterator ;

namespace impl
{
    template <int  i> 	 
    struct nocase_scanner_stripper 
    {
       template<typename IteratorT> 
       struct local {
         typedef  nocase_iterator<IteratorT> stripped_scanner;
       };
    };

    template <> struct nocase_scanner_stripper<1>
    {
       template<typename ScannerT> 
       struct local {
         typedef typename 
            nocase_iterator<typename ScannerT::iterator_type> stripped_scanner;
       };
    };    
            
           
    template<typename  IteratorT, typename MatchTraitsT ,typename SkipT>
    selector1 
    nocase_scanner_stripper_helper(scanner<IteratorT, MatchTraitsT, SkipT> );
      
    selector2 nocase_scanner_stripper_helper(...);

} //end namespace impl

         
template <typename IteratorT>
class nocase_iterator {

public:

    typedef IteratorT   iterator_type;

    static IteratorT t();
    typedef typename 
    impl::nocase_scanner_stripper< 
            sizeof(impl::nocase_scanner_stripper_helper(t()))
	    >:: 
    template local<IteratorT>::stripped_scanner iterator_without_scanner; 

#if defined (BOOST_MSVC)
    typedef spirit::iterator_traits<IteratorT> iterator_traits_;
#else
    typedef std::iterator_traits<IteratorT> iterator_traits_;
#endif

    typedef typename impl::iterator_kind
        <typename iterator_traits_::iterator_category>::T iterator_category;

    typedef typename iterator_traits_::difference_type   difference_type;
    typedef typename iterator_traits_::pointer           pointer;
    typedef typename iterator_traits_::reference         reference;
    typedef typename iterator_traits_::value_type        value_type;

    nocase_iterator(IteratorT const& iter_);

    template <typename IteratorTB>
    nocase_iterator&    operator=(nocase_iterator<IteratorTB> const& iter_)
    {
      iter = iter_.iterator();
      return *this;
    }   
        
    nocase_iterator&    operator=(IteratorT const& iter_);
    IteratorT           iterator() const;

    reference           operator*();
    pointer             operator->() const;
    nocase_iterator&    operator++();
    nocase_iterator     operator++(int);

    bool                operator==(nocase_iterator const& other) const;
    bool                operator!=(nocase_iterator const& other) const;

private:

    iterator_type       iter;
    value_type          next;
};


///////////////////////////////////////////////////////////////////////////////
//
//  strip_scanner class and specializations
//
//      Helper class to strip the scanner wrapper off an iterator.
//      This utility is used when we want to perform character
//      level parsing (see scanner above).
//
///////////////////////////////////////////////////////////////////////////////
namespace impl {

    template <int  i> 	 
    struct stripped_scanner_iterator 
    {
       template<typename T> 
       struct local {
        typedef T iterator_type;
        typedef selector2 selector_type;
       };
    };

    template <> struct stripped_scanner_iterator<1>
    {
       template<typename T> 
       struct local {
         typedef typename T::iterator_without_scanner iterator_type;
         typedef selector1 selector_type;
       };
    };    
            
           
    template<typename  IteratorT, typename MatchTraitsT , typename SkipT>
    selector1 strip_scanner_helper(scanner<IteratorT, MatchTraitsT, SkipT> );
      
    template <typename IteratorT, typename MatchTraitsT, typename SkipT>
    selector1 strip_scanner_helper(
	 nocase_iterator<scanner<IteratorT, MatchTraitsT, SkipT> > );

    selector2 strip_scanner_helper(...);


    template <typename T>
    struct strip_scanner {
        static T t();
	typedef typename 
		 stripped_scanner_iterator<sizeof(strip_scanner_helper(t()))>:: 
		 template local<T>::iterator_type iterator_type; 

	template <typename IteratorT, typename MatchTraitsT, typename SkipT>
        static  iterator_type 
	get_helper(selector1 s, 
		  scanner<IteratorT, MatchTraitsT, SkipT> const& scanner_)
	{
           return scanner_.iterator();
	}

        template <typename IteratorT, typename MatchTraitsT, typename SkipT>
        static iterator_type  
        get_helper(selector1 s,
		   nocase_iterator<scanner<IteratorT,MatchTraitsT, SkipT> >
		   const& nocase_iter)
        {
           return strip_scanner<scanner<IteratorT, SkipT> >::
            get_helper(s,nocase_iter.iterator());
        }

	template <typename U>
        static iterator_type get_helper(selector2 s, U ptr) 
	{
           return ptr;
	}

	static iterator_type get(T const& t_ )
	{
	  typedef typename 
		 stripped_scanner_iterator<sizeof(strip_scanner_helper(t()))>:: 
		 template local<T>::selector_type selector_type; 
	 return  get_helper(selector_type(), t_);
	} 
            

    };

///////////////////////////////////////////////////////////////////////////////
//
//
//      Helper class to strip the nocase wrapper off an iterator.
//      This utility is used when we want to perform character
//      level parsing (see scanner above).
//
///////////////////////////////////////////////////////////////////////////////

    template <int  i> 	 
    struct nocase_stripper 
    {
       template<typename IteratorT> 
       struct local {
         typedef  IteratorT stripped_nocase_iterator;
	 typedef selector2 selector_type; 
       };
    };
    ////////////////////////////////////////////////////// 
    template <> struct nocase_stripper<1>
    {
       template<typename NoCaseIteratorT> 
       struct local {
         typedef typename NoCaseIteratorT::iterator_type 
		           stripped_nocase_iterator;
	 typedef selector1 selector_type; 
       };
    };    
            
    ////////////////////////////////////////////////////// 
    template<typename  IteratorT>
    selector1 nocase_stripper_helper(nocase_iterator<IteratorT> );
      
    selector2 nocase_stripper_helper(...);

    template <typename T>
    struct strip_nocase {
        
	static T t();     
	typedef typename 
		 nocase_stripper<sizeof(nocase_stripper_helper(t()))>:: 
		 template local<T>::stripped_nocase_iterator iterator_type; 


        template<class U>
        static iterator_type get_helper(selector2 s, U ptr) { return ptr;}

	template<class IteratorT>
        static iterator_type get_helper(selector1 s,
			        nocase_iterator<IteratorT> const & nocase) 
	{
           return nocase.iterator();
	}    

	static iterator_type get(T& const t_)
	{          
	  typedef typename 
		 stripped_scanner_iterator<sizeof(strip_scanner_helper(t()))>:: 
		 template local<T>::selector_type selector_type; 
                 get_helper(selector_type(), t_);
	}   
         		 
    };

} // namespace impl
///////////////////////////////////////////////////////////////////////////////
}   //  namespace Spirit

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级一区二区三区| 亚洲chinese男男1069| 亚洲欧洲成人精品av97| 亚洲成av人片一区二区梦乃| 九色综合国产一区二区三区| 91在线观看视频| 久久亚洲免费视频| 一区二区日韩电影| 不卡电影免费在线播放一区| 日韩欧美视频在线| 亚洲一区二区在线观看视频 | 国模套图日韩精品一区二区| 色综合天天性综合| 亚洲精品大片www| 国产在线不卡视频| 欧美理论片在线| 亚洲人妖av一区二区| 毛片不卡一区二区| 欧美人动与zoxxxx乱| 日韩理论片一区二区| 国产精品资源在线| 精品国产乱码久久久久久图片 | 97久久超碰精品国产| 亚洲精品在线三区| 免费一级欧美片在线观看| 在线观看国产一区二区| 自拍av一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 在线91免费看| 天堂久久久久va久久久久| 色999日韩国产欧美一区二区| 国产精品乱码妇女bbbb| 豆国产96在线|亚洲| 国产视频一区二区在线| 国产成人免费视频网站| 国产午夜精品在线观看| 国产成人av一区二区三区在线| 久久久精品人体av艺术| 国产成人精品免费一区二区| 精品国产乱码久久久久久牛牛| 蓝色福利精品导航| 久久久久久电影| 国产精一区二区三区| 亚洲国产精品99久久久久久久久| 国产综合成人久久大片91| 精品动漫一区二区三区在线观看| 国内精品第一页| 久久久不卡网国产精品一区| 国产一区二区网址| 国产精品久久久久久久久快鸭| 暴力调教一区二区三区| 亚洲另类在线一区| 制服丝袜在线91| 国产一区在线观看麻豆| 欧美激情一区二区在线| 色哟哟欧美精品| 日本不卡视频一二三区| 久久久国际精品| 色综合亚洲欧洲| 性感美女久久精品| 久久天堂av综合合色蜜桃网| 国产69精品一区二区亚洲孕妇| 日韩一区在线看| 欧美老肥妇做.爰bbww视频| 激情久久五月天| 中文字幕在线一区二区三区| 欧美色老头old∨ideo| 久久成人精品无人区| 亚洲欧洲日韩一区二区三区| 欧美色综合影院| 国产精品一区久久久久| 一区二区三区蜜桃网| 欧美大胆一级视频| 色欧美88888久久久久久影院| 日韩国产欧美一区二区三区| 中日韩av电影| 日韩一二在线观看| 97久久精品人人做人人爽50路| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲伦理在线精品| 精品国内二区三区| 欧美三级韩国三级日本一级| 激情文学综合插| 午夜婷婷国产麻豆精品| 国产精品视频九色porn| 欧美一级黄色录像| 日本精品一区二区三区高清 | 91麻豆精品91久久久久同性| 成人av网站免费观看| 麻豆精品一区二区三区| 婷婷夜色潮精品综合在线| 日本一二三不卡| 日韩精品一区二区三区四区| 色婷婷av一区二区三区大白胸| 国产精品影视天天线| 日本欧美一区二区| 亚洲午夜在线电影| 国产精品对白交换视频| 久久美女艺术照精彩视频福利播放 | aaa国产一区| 国产麻豆精品视频| 久久精品99国产精品| 天天综合日日夜夜精品| 一区二区在线观看不卡| 亚洲国产精品成人综合| 久久久久亚洲综合| 久久久久免费观看| 26uuu精品一区二区| 欧美成人欧美edvon| 3d成人h动漫网站入口| 欧美日韩国产一区二区三区地区| 播五月开心婷婷综合| 成人午夜av电影| 成人丝袜视频网| 99精品欧美一区| 99视频一区二区| 一本大道久久精品懂色aⅴ| 成人黄色片在线观看| 99综合电影在线视频| 成人av电影在线| 色婷婷精品久久二区二区蜜臀av | 日本福利一区二区| 一本色道亚洲精品aⅴ| 色一情一伦一子一伦一区| 91蝌蚪porny| 在线观看亚洲专区| 欧美福利电影网| 日韩一区二区视频| 欧美mv和日韩mv的网站| 欧美精品一区二区三区蜜臀| 久久久久久久综合狠狠综合| 国产欧美日韩精品一区| 日韩美女精品在线| 亚洲电影一区二区| 裸体健美xxxx欧美裸体表演| 久久机这里只有精品| 国产一区二区免费看| 91香蕉视频污| 欧美久久久久久蜜桃| 精品欧美乱码久久久久久| 国产欧美精品一区| 一区二区三区四区蜜桃| 毛片一区二区三区| 波多野结衣中文一区| 日本高清不卡aⅴ免费网站| 欧美一卡二卡三卡四卡| 国产精品视频一区二区三区不卡| 亚洲女人的天堂| 免费人成在线不卡| 99久久久精品| 91精品国产欧美日韩| 欧美激情一区二区三区蜜桃视频 | 日韩精品一区二区三区视频| 欧美国产一区二区在线观看| 一区二区欧美国产| 久久www免费人成看片高清| 成人avav在线| 欧美电影精品一区二区| 成人欧美一区二区三区在线播放| 午夜激情一区二区| 国产成人精品免费一区二区| 欧美视频完全免费看| 日本一区免费视频| 五月天激情小说综合| 波多野结衣亚洲| 日韩欧美国产系列| 一区二区三区欧美日| 国产精品一二一区| 欧美一区二区在线免费观看| 日韩一区在线看| 国产一区二区女| 6080午夜不卡| 依依成人精品视频| 99这里只有久久精品视频| 精品国产免费一区二区三区四区 | 国产欧美日韩视频在线观看| 日本午夜精品视频在线观看| 丁香婷婷综合色啪| 精品国产网站在线观看| 日韩国产精品91| 欧美丝袜自拍制服另类| 一色桃子久久精品亚洲| 国产不卡视频一区二区三区| 日韩视频免费观看高清完整版在线观看| 亚洲精品少妇30p| 92精品国产成人观看免费| www国产精品av| 久久se精品一区精品二区| 欧美一区二区三区免费观看视频| 亚洲综合免费观看高清完整版| 欧美日韩一区二区在线观看视频 | 国产馆精品极品| 精品国产网站在线观看| 蜜桃视频一区二区三区| 在线不卡免费欧美| 亚洲成av人综合在线观看| 欧美日免费三级在线| 亚洲影院在线观看| 欧美日韩一区二区三区视频| 亚洲影院久久精品|