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

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

?? reimpl2.h

?? 用于正則表達式的C++庫. 現在的版本那是2.6.4
?? H
?? 第 1 頁 / 共 4 頁
字號:
//+---------------------------------------------------------------------------
//
//  Copyright ( C ) Microsoft, 1994 - 2002.
//
//  File:       reimpl2.h
//
//  Functions:  helpers for matching and substituting regular expressions
//
//  Notes:      implementation details that really belong in a cpp file,
//              but can't because of template weirdness
//
//  Author:     Eric Niebler ( ericne@microsoft.com )
//
//  History:    8/15/2001   ericne   Created
//
//----------------------------------------------------------------------------

#ifndef REIMPL_H
#define REIMPL_H

//
// Helper functions for match and substitute
//

namespace detail
{

// For use while doing uppercase/lowercase conversions:
inline  char   regex_toupper(  char   ch ) { using namespace std; return (  char   )toupper( ch ); }
inline  char   regex_tolower(  char   ch ) { using namespace std; return (  char   )tolower( ch ); }
inline wchar_t regex_toupper( wchar_t ch ) { using namespace std; return ( wchar_t )towupper( ch ); }
inline wchar_t regex_tolower( wchar_t ch ) { using namespace std; return ( wchar_t )towlower( ch ); }

template< typename IBeginT, typename IEndT >
inline void regex_toupper( IBeginT ibegin, IEndT iend )
{
    typedef typename std::iterator_traits<IEndT>::value_type char_type;
    typedef std::char_traits<char_type> traits_type;

    for( ; iend != ibegin; ++ibegin )
        traits_type::assign( *ibegin, regex_toupper( *ibegin ) );
}

template< typename IBeginT, typename IEndT >
inline void regex_tolower( IBeginT ibegin, IEndT iend )
{
    typedef typename std::iterator_traits<IEndT>::value_type char_type;
    typedef std::char_traits<char_type> traits_type;

    for( ; iend != ibegin; ++ibegin )
        traits_type::assign( *ibegin, regex_tolower( *ibegin ) );
}

//
// Helper fn for swapping two auto_ptr's
//
template< typename T >
inline void swap_auto_ptr( std::auto_ptr<T> & left, std::auto_ptr<T> & right )
{
    std::auto_ptr<T> temp( left );
    left  = right;
    right = temp;
}

template< typename T >
inline void reset_auto_ptr( std::auto_ptr<T> & left )
{
    std::auto_ptr<T> temp( 0 );
    left = temp;
}

template< typename T, typename U >
inline void reset_auto_ptr( std::auto_ptr<T> & left, U * right )
{
    std::auto_ptr<T> temp( right );
    left = temp;
}

typedef int instantiator;

inline instantiator REGEX_CDECL instantiator_helper( ... )
{
    return instantiator();
}

// --------------------------------------------------------------------------
//
// Class:       match_param
//
// Description: Struct that contains the state of the matching operation.
//              Passed by reference to all recursive_match_all and recursive_match_this routines.
//
// Methods:     match_param - ctor
//
// Members:     ibufferbegin - start of the buffer
//              ibegin       - start of this iteration
//              iend        - end of the string
//              prgbackrefs  - pointer to backref array
//
// History:     8/14/2000 - ericne - Created
//
// --------------------------------------------------------------------------
template< typename IterT >
struct match_param
{
    typedef backref_tag<IterT>              backref_type;
    typedef sub_expr_base<IterT> const *    sub_expr_ptr;

    // for performance reasons, the most frequently used fields 
    // are placed at offsets which are a power of 2 (assuming
    // a 32-bit architecture, and iterators which are 32 bits).

    backref_type *      m_prgbackrefs;      // offsetof == 0
    IterT               m_iend;             // offsetof == 4
    IterT               m_icur;             // offsetof == 8
    size_t              m_cbackrefs;
    sub_expr_ptr        m_pnext;            // offsetof == 16
    IterT               m_ibufferbegin;
    IterT               m_imatchbegin;
    sub_expr_ptr        m_pfirst;
    unsafe_stack *      m_pstack;           // offsetof == 32
    bool                m_no0len;
    bool                m_reserved;

    match_param
    (
        IterT           ibufferbegin,
        IterT           imatchbegin,
        IterT           iend,
        backref_type *  prgbackrefs,
        size_t          cbackrefs
    )
        : m_prgbackrefs( prgbackrefs )
        , m_iend( iend )
        , m_icur( imatchbegin )
        , m_cbackrefs( cbackrefs )
        , m_pnext( 0 )
        , m_ibufferbegin( ibufferbegin )
        , m_imatchbegin( imatchbegin )
        , m_pfirst( 0 )
        , m_pstack( 0 )
        , m_no0len( false )
        , m_reserved( false )
    {
    }
};

// --------------------------------------------------------------------------
//
// Class:       arena_allocator
//
// Description: A small, fast allocator for speeding up pattern compilation.
//              Every basic_rpattern object has an arena as a member.
//              sub_expr objects can only be allocated from this arena.
//              Memory is alloc'ed in chunks using the underlying allocator.
//              Chunks are freed en-masse when clear() or finalize() is called.
//
// History:     8/17/2001 - ericne - Created
//
// Notes:       This is NOT a std-compliant allocator and CANNOT be used with
//              STL containers. arena_allocator objects maintain state, and
//              STL containers are allowed to assume their allocators do
//              not maintain state. In regexpr2.cpp, I define slist<>, a simple
//              arena-friendly singly-linked list for use with the arena
//              allocator.
//
// --------------------------------------------------------------------------
template< typename AllocT = std::allocator<char> >
struct pool_impl
{
    typedef typename rebind<AllocT, char>::type char_allocator_type;

    struct mem_block
    {
        size_t  m_offset;
        size_t  m_blocksize;
        mem_block * m_pnext;
        unsigned char m_data[ 1 ];
    };
#if !defined(_MSC_VER) | 1200 < _MSC_VER
    struct pool_data : char_allocator_type
    {
        pool_data( size_t default_size, char_allocator_type const & alloc )
            : char_allocator_type( alloc )
            , m_pfirst( 0 )
            , m_default_size( default_size )
        {
        }
        mem_block * m_pfirst;
        size_t      m_default_size;
        char_allocator_type & get_allocator()
        {
            return *this;
        }
    } m_data;
#else
    struct pool_data
    {
        pool_data( size_t default_size, char_allocator_type const & alloc )
            : m_alloc( alloc )
            , m_pfirst( 0 )
            , m_default_size( default_size )
        {
        }
        char_allocator_type m_alloc;
        mem_block * m_pfirst;
        size_t      m_default_size;
        char_allocator_type & get_allocator()
        {
            return m_alloc;
        }
    } m_data;
#endif
    void new_block( size_t size );
    void clear();
    void * allocate( size_t size );
    explicit pool_impl( size_t default_size, char_allocator_type const & alloc = char_allocator_type() );
    ~pool_impl();
    char_allocator_type get_allocator() const
    {
        return const_cast<pool_impl*>(this)->m_data.get_allocator();
    }
};

template< typename T, typename AllocT = std::allocator<char> >
class arena_allocator
{
public:
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
    typedef T *pointer;
    typedef T const *const_pointer;
    typedef T & reference;
    typedef T const & const_reference;
    typedef T value_type;

    typedef typename rebind<AllocT, char>::type			char_alloc_type;
    typedef pool_impl<AllocT> pool_impl_t;
    typedef typename rebind<AllocT, pool_impl_t>::type	pool_alloc_type;

    explicit arena_allocator( size_t default_size, char_alloc_type const & alloc = char_alloc_type() )
        : m_pool( 0 )
    {
        char_alloc_type char_alloc( alloc );
        pool_alloc_type pool_alloc( convert_allocator<pool_impl_t>( char_alloc, 0 ) );
        m_pool = pool_alloc.allocate( 1, 0 );
        pool_alloc.construct( m_pool, pool_impl_t( default_size, char_alloc ) ); // can't throw
    }
#if !defined(_MSC_VER) | 1200 < _MSC_VER
    arena_allocator( arena_allocator const & that )
        : m_pool( that.m_pool )
    {
    }
#endif
    template< typename U >
    arena_allocator( arena_allocator<U> const & that )
        : m_pool( that.m_pool )
    {
    }
    ~arena_allocator()
    { // Many arena_allocators may point to m_pool, so don't delete it.
    } // Rather, wait for someone to call finalize().
    pointer allocate( size_type size, void const * =0 )
    {
        return static_cast<T*>( m_pool->allocate( size * sizeof(T) ) );
    }
    void deallocate( void *, size_type )
    { // no-op. deallocation happens when pool is finalized or cleared.
    }
    void construct( pointer p, T const & t )
    {
        new( static_cast<void*>(p) ) T( t );
    }
    void destroy( pointer p )
    {
        regex::detail::destroy( p );
    }
#if !defined(_MSC_VER) | 1200 < _MSC_VER
    template< typename U > struct rebind
    {
        typedef arena_allocator<U> other;
    };
#endif
    void clear()
    {
        m_pool->clear();
    }
    void finalize()
    {
        char_alloc_type char_alloc( m_pool->get_allocator() );
        pool_alloc_type pool_alloc( convert_allocator<pool_impl_t>( char_alloc, 0 ) );
        pool_alloc.destroy( m_pool );
        pool_alloc.deallocate( m_pool, 1 );
        m_pool = 0;
    }
    void swap( arena_allocator & that )
    {
        using std::swap;
        swap( m_pool, that.m_pool );
    }

    // the pool lives here
    pool_impl_t * m_pool;
};

// Dummy struct used by the pool allocator to align returned pointers
struct not_pod
{
    virtual ~not_pod() {}
};

template< typename AllocT >
inline pool_impl<AllocT>::pool_impl( size_t default_size, char_allocator_type const & alloc )
    : m_data( default_size, alloc )
{
}

template< typename AllocT >
inline pool_impl<AllocT>::~pool_impl()
{
    clear();
}

template< typename AllocT >
inline void pool_impl<AllocT>::clear()
{
    for( mem_block * pnext; m_data.m_pfirst; m_data.m_pfirst = pnext )
    {
        pnext = m_data.m_pfirst->m_pnext;
        m_data.get_allocator().deallocate( reinterpret_cast<char*>( m_data.m_pfirst ), m_data.m_pfirst->m_blocksize );
    }
}

template< typename AllocT >
inline void pool_impl<AllocT>::new_block( size_t size )
{
    size_t blocksize = regex_max( m_data.m_default_size, size ) + offsetof( mem_block, m_data );
    mem_block * pnew = reinterpret_cast<mem_block*>( m_data.get_allocator().allocate( blocksize, 0 ) );
    if( 0 == pnew )
    {
        throw std::bad_alloc();
    }
    pnew->m_offset      = 0;
    pnew->m_blocksize   = blocksize;
    pnew->m_pnext       = m_data.m_pfirst;
    m_data.m_pfirst     = pnew;
}

template< typename AllocT >
inline void * pool_impl<AllocT>::allocate( size_t size )
{
    if( 0 == size )
        size = 1;

    if( 0 == m_data.m_pfirst || m_data.m_pfirst->m_offset + size > m_data.m_default_size )
        new_block( size );

    void * pnew = m_data.m_pfirst->m_data + m_data.m_pfirst->m_offset;

    // ensure returned pointers are always suitably aligned
    m_data.m_pfirst->m_offset += ( ( size + alignof<not_pod>::value - 1 )
                                 & ~( alignof<not_pod>::value - 1 ) );

    return pnew;
}

// The regex_arena is a basic, vanilla arena_allocator.
typedef arena_allocator<char> regex_arena;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品第一国产综合精品aⅴ| 日韩视频永久免费| 欧美一区二区久久| 亚洲欧美日韩国产中文在线| 丝袜美腿成人在线| 丁香婷婷综合五月| av一区二区三区四区| 欧美日韩1234| 国产精品剧情在线亚洲| 老司机精品视频导航| 欧美伊人久久久久久久久影院| 久久久久久久久久久电影| 日本最新不卡在线| 91成人免费网站| 亚洲欧洲韩国日本视频| 国产一区二区主播在线| 欧美一卡二卡三卡四卡| 亚洲免费av高清| 丁香婷婷综合激情五月色| 欧美成人福利视频| 日韩av二区在线播放| 欧美日韩在线播| 亚洲狠狠丁香婷婷综合久久久| 国产不卡视频一区| 久久综合久久99| 久久精品国产色蜜蜜麻豆| 欧美一区二区免费| 蜜桃av噜噜一区二区三区小说| 欧美日韩在线不卡| 日韩电影网1区2区| 欧美一区二区久久久| 琪琪一区二区三区| 日韩免费视频一区| 美女精品自拍一二三四| 精品国产乱码久久| 久久99国产精品久久99果冻传媒| 色综合久久久网| 久久精品一区二区三区不卡牛牛| 免费在线观看视频一区| 91精品国产综合久久国产大片| 国产成人精品亚洲777人妖| 日韩欧美亚洲国产精品字幕久久久| 日韩主播视频在线| 7777精品伊人久久久大香线蕉完整版| 亚洲第一av色| 欧美一区二区三区四区久久| 日韩国产一二三区| 日韩片之四级片| 国产精品综合二区| 国产精品久久久久久久岛一牛影视| 成人app在线观看| 亚洲情趣在线观看| 777亚洲妇女| 精品一区二区三区的国产在线播放| 欧美一级专区免费大片| 国产真实乱子伦精品视频| 国产欧美精品日韩区二区麻豆天美| 成人午夜精品一区二区三区| 亚洲欧美一区二区三区国产精品 | 亚洲激情av在线| 在线观看亚洲一区| 日本一不卡视频| 国产日产欧美一区| 一本一道久久a久久精品综合蜜臀| 亚洲大片一区二区三区| 日韩一区二区三区视频| 正在播放一区二区| 国产在线不卡视频| 亚洲一区二区在线播放相泽| 日韩欧美国产成人一区二区| 粉嫩高潮美女一区二区三区| 亚洲亚洲精品在线观看| 精品久久久网站| 93久久精品日日躁夜夜躁欧美| 日韩电影在线一区二区三区| 国产精品久久久久婷婷 | 国产91露脸合集magnet| 一区二区三区欧美久久| 日韩欧美一级精品久久| 91丨九色丨蝌蚪富婆spa| 欧美bbbbb| 玉米视频成人免费看| 久久久久国产精品厨房| 欧美电影影音先锋| 91在线国产福利| 国产91丝袜在线播放| 视频在线观看一区| 亚洲人精品午夜| 国产三级精品视频| 精品国产精品网麻豆系列| 欧美性生活一区| 成人成人成人在线视频| 久久精品国内一区二区三区| 亚洲风情在线资源站| 国产精品不卡一区二区三区| 久久综合网色—综合色88| 91精品午夜视频| 欧美人妇做爰xxxⅹ性高电影| www.亚洲色图.com| 国产露脸91国语对白| 蜜桃视频一区二区三区在线观看| 亚洲综合色婷婷| 亚洲乱码日产精品bd| 国产精品久久三| 欧美国产亚洲另类动漫| 337p日本欧洲亚洲大胆色噜噜| 欧美丰满嫩嫩电影| 欧美日韩一区三区四区| 91久久一区二区| 色8久久人人97超碰香蕉987| av网站一区二区三区| 9久草视频在线视频精品| 国产成+人+日韩+欧美+亚洲| 国产乱妇无码大片在线观看| 国产精品69毛片高清亚洲| 国产在线观看免费一区| 国产成人午夜精品5599| 国产宾馆实践打屁股91| 高清国产一区二区三区| 丰满放荡岳乱妇91ww| 国产精品亚洲一区二区三区在线| 国产伦精品一区二区三区视频青涩| 九九热在线视频观看这里只有精品| 久久成人综合网| 国产精品自拍毛片| 成人黄色av电影| 一本色道久久综合亚洲91| 欧美综合久久久| 91精品国产综合久久婷婷香蕉| 7777女厕盗摄久久久| 欧美大肚乱孕交hd孕妇| 国产日韩欧美激情| 亚洲色图制服诱惑| 亚洲夂夂婷婷色拍ww47| 日韩国产欧美在线播放| 国产在线视频一区二区| 不卡区在线中文字幕| 91极品美女在线| a亚洲天堂av| 欧美在线观看视频一区二区| 色域天天综合网| 欧美一区二区美女| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲精品中文字幕乱码三区| 亚洲午夜精品在线| 老鸭窝一区二区久久精品| 国产精品1区2区3区在线观看| 99久久久精品| 日韩午夜激情视频| 欧美高清在线精品一区| 亚洲午夜av在线| 国内精品第一页| 91性感美女视频| 5566中文字幕一区二区电影| 久久看人人爽人人| 亚洲国产成人tv| 国产电影一区二区三区| 国产精品久久久久久久午夜片| 亚洲激情六月丁香| 国产永久精品大片wwwapp| 狠狠色丁香久久婷婷综| 99久久精品免费看国产| 91精品在线一区二区| 国产精品久久久久桃色tv| 日韩**一区毛片| 91麻豆国产自产在线观看| 日韩亚洲欧美在线| 亚洲激情自拍偷拍| 粉嫩一区二区三区在线看| 欧美一区二区三区小说| 亚洲激情男女视频| 成人午夜免费电影| 日韩一二三区不卡| 亚洲免费观看在线视频| 国内精品不卡在线| 欧美一级高清片| 樱花影视一区二区| 成人黄色国产精品网站大全在线免费观看| 欧美一区二区三区免费在线看| 亚洲精品精品亚洲| 不卡电影一区二区三区| 国产亚洲短视频| 精品一区二区三区的国产在线播放 | 九九**精品视频免费播放| 欧美日韩国产另类不卡| 一区二区三区色| 99久久99久久综合| 国产精品久久久久一区| 国产成人精品www牛牛影视| 日韩欧美国产成人一区二区| 欧美96一区二区免费视频| 欧美性色aⅴ视频一区日韩精品| ㊣最新国产の精品bt伙计久久| 国产精品中文字幕欧美| 精品国产91久久久久久久妲己 | 国产精品福利在线播放| 国产乱码精品一区二区三区av| 精品国产免费久久 | 色综合视频在线观看| 国产精品久久久一区麻豆最新章节|