imgtools/imglib/boostlibrary/boost/regex/v4/perl_matcher.hpp
author jjkang
Fri, 25 Jun 2010 18:11:34 +0800
changeset 600 6d08f4a05d93
permissions -rw-r--r--
add deprecated files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
600
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     1
/*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     2
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     3
 * Copyright (c) 2002
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     4
 * John Maddock
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     5
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     6
 * Use, modification and distribution are subject to the 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     7
 * Boost Software License, Version 1.0. (See accompanying file 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     8
 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     9
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    10
 */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    11
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    12
#ifndef BOOST_REGEX_MATCHER_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    13
#define BOOST_REGEX_MATCHER_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    14
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    15
#include <boost/regex/v4/iterator_category.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    16
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    17
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    18
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    19
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    20
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    21
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    22
#  include BOOST_ABI_PREFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    23
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    24
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    25
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    26
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    27
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    28
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    29
#  pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    30
#  pragma warning(disable: 4800)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    31
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    32
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    33
namespace boost{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    34
namespace re_detail{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    35
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    36
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    37
// error checking API:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    38
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    39
BOOST_REGEX_DECL void BOOST_REGEX_CALL verify_options(boost::regex_constants::syntax_option_type ef, match_flag_type mf);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    40
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    41
// function can_start:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    42
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    43
template <class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    44
inline bool can_start(charT c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    45
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    46
   return ((c < static_cast<charT>(0)) ? true : ((c >= static_cast<charT>(1 << CHAR_BIT)) ? true : map[c] & mask));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    47
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    48
inline bool can_start(char c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    49
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    50
   return map[(unsigned char)c] & mask;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    51
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    52
inline bool can_start(signed char c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    53
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    54
   return map[(unsigned char)c] & mask;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    55
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    56
inline bool can_start(unsigned char c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    57
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    58
   return map[c] & mask;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    59
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    60
inline bool can_start(unsigned short c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    61
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    62
   return ((c >= (1 << CHAR_BIT)) ? true : map[c] & mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    63
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    64
#if !defined(__hpux) // WCHAR_MIN not usable in pp-directives.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    65
#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    66
inline bool can_start(wchar_t c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    67
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    68
   return ((c >= static_cast<wchar_t>(1u << CHAR_BIT)) ? true : map[c] & mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    69
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    70
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    71
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    72
#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    73
inline bool can_start(unsigned int c, const unsigned char* map, unsigned char mask)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    74
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    75
   return (((c >= static_cast<unsigned int>(1u << CHAR_BIT)) ? true : map[c] & mask));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    76
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    77
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    78
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    79
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    80
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    81
// Unfortunately Rogue Waves standard library appears to have a bug
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    82
// in std::basic_string::compare that results in eroneous answers
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    83
// in some cases (tested with Borland C++ 5.1, Rogue Wave lib version
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    84
// 0x020101) the test case was:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    85
// {39135,0} < {0xff,0}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    86
// which succeeds when it should not.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    87
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    88
#ifndef _RWSTD_VER
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    89
#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    90
template <class C, class T, class A>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    91
inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    92
{ 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    93
   if(0 == *p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    94
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    95
      if(s.empty() || ((s.size() == 1) && (s[0] == 0)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    96
         return 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    97
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    98
   return s.compare(p); 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    99
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   100
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   101
#else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   102
#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   103
template <class C, class T, class A>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   104
inline int string_compare(const std::basic_string<C,T,A>& s, const C* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   105
{ 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   106
   if(0 == *p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   107
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   108
      if(s.empty() || ((s.size() == 1) && (s[0] == 0)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   109
         return 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   110
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   111
   return s.compare(p); 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   112
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   113
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   114
inline int string_compare(const std::string& s, const char* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   115
{ return std::strcmp(s.c_str(), p); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   116
# ifndef BOOST_NO_WREGEX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   117
inline int string_compare(const std::wstring& s, const wchar_t* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   118
{ return std::wcscmp(s.c_str(), p); }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   119
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   120
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   121
template <class Seq, class C>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   122
inline int string_compare(const Seq& s, const C* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   123
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   124
   std::size_t i = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   125
   while((i < s.size()) && (p[i] == s[i]))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   126
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   127
      ++i;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   128
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   129
   return (i == s.size()) ? -p[i] : s[i] - p[i];
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   130
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   131
# define STR_COMP(s,p) string_compare(s,p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   132
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   133
template<class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   134
inline const charT* re_skip_past_null(const charT* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   135
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   136
  while (*p != static_cast<charT>(0)) ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   137
  return ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   138
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   139
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   140
template <class iterator, class charT, class traits_type, class char_classT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   141
iterator BOOST_REGEX_CALL re_is_set_member(iterator next, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   142
                          iterator last, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   143
                          const re_set_long<char_classT>* set_, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   144
                          const regex_data<charT, traits_type>& e, bool icase)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   145
{   
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   146
   const charT* p = reinterpret_cast<const charT*>(set_+1);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   147
   iterator ptr;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   148
   unsigned int i;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   149
   //bool icase = e.m_flags & regex_constants::icase;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   150
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   151
   if(next == last) return next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   152
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   153
   typedef typename traits_type::string_type traits_string_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   154
   const ::boost::regex_traits_wrapper<traits_type>& traits_inst = *(e.m_ptraits);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   155
   
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   156
   // dwa 9/13/00 suppress incorrect MSVC warning - it claims this is never
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   157
   // referenced
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   158
   (void)traits_inst;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   159
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   160
   // try and match a single character, could be a multi-character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   161
   // collating element...
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   162
   for(i = 0; i < set_->csingles; ++i)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   163
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   164
      ptr = next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   165
      if(*p == static_cast<charT>(0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   166
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   167
         // treat null string as special case:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   168
         if(traits_inst.translate(*ptr, icase) != *p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   169
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   170
            while(*p == static_cast<charT>(0))++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   171
            continue;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   172
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   173
         return set_->isnot ? next : (ptr == next) ? ++next : ptr;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   174
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   175
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   176
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   177
         while(*p && (ptr != last))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   178
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   179
            if(traits_inst.translate(*ptr, icase) != *p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   180
               break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   181
            ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   182
            ++ptr;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   183
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   184
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   185
         if(*p == static_cast<charT>(0)) // if null we've matched
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   186
            return set_->isnot ? next : (ptr == next) ? ++next : ptr;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   187
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   188
         p = re_skip_past_null(p);     // skip null
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   189
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   190
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   191
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   192
   charT col = traits_inst.translate(*next, icase);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   193
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   194
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   195
   if(set_->cranges || set_->cequivalents)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   196
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   197
      traits_string_type s1;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   198
      //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   199
      // try and match a range, NB only a single character can match
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   200
      if(set_->cranges)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   201
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   202
         if((e.m_flags & regex_constants::collate) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   203
            s1.assign(1, col);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   204
         else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   205
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   206
            charT a[2] = { col, charT(0), };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   207
            s1 = traits_inst.transform(a, a + 1);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   208
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   209
         for(i = 0; i < set_->cranges; ++i)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   210
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   211
            if(STR_COMP(s1, p) >= 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   212
            {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   213
               do{ ++p; }while(*p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   214
               ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   215
               if(STR_COMP(s1, p) <= 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   216
                  return set_->isnot ? next : ++next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   217
            }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   218
            else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   219
            {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   220
               // skip first string
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   221
               do{ ++p; }while(*p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   222
               ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   223
            }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   224
            // skip second string
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   225
            do{ ++p; }while(*p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   226
            ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   227
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   228
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   229
      //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   230
      // try and match an equivalence class, NB only a single character can match
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   231
      if(set_->cequivalents)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   232
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   233
         charT a[2] = { col, charT(0), };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   234
         s1 = traits_inst.transform_primary(a, a +1);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   235
         for(i = 0; i < set_->cequivalents; ++i)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   236
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   237
            if(STR_COMP(s1, p) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   238
               return set_->isnot ? next : ++next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   239
            // skip string
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   240
            do{ ++p; }while(*p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   241
            ++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   242
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   243
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   244
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   245
   if(traits_inst.isctype(col, set_->cclasses) == true)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   246
      return set_->isnot ? next : ++next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   247
   if((set_->cnclasses != 0) && (traits_inst.isctype(col, set_->cnclasses) == false))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   248
      return set_->isnot ? next : ++next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   249
   return set_->isnot ? ++next : next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   250
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   251
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   252
template <class BidiIterator>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   253
class repeater_count
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   254
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   255
   repeater_count** stack;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   256
   repeater_count* next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   257
   int state_id;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   258
   std::size_t count;        // the number of iterations so far
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   259
   BidiIterator start_pos;   // where the last repeat started
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   260
public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   261
   repeater_count(repeater_count** s)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   262
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   263
      stack = s;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   264
      next = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   265
      state_id = -1;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   266
      count = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   267
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   268
   repeater_count(int i, repeater_count** s, BidiIterator start)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   269
      : start_pos(start)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   270
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   271
      state_id = i;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   272
      stack = s;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   273
      next = *stack;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   274
      *stack = this;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   275
      if(state_id > next->state_id)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   276
         count = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   277
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   278
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   279
         repeater_count* p = next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   280
         while(p->state_id != state_id)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   281
            p = p->next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   282
         count = p->count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   283
         start_pos = p->start_pos;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   284
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   285
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   286
   ~repeater_count()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   287
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   288
      *stack = next;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   289
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   290
   std::size_t get_count() { return count; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   291
   int get_id() { return state_id; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   292
   std::size_t operator++() { return ++count; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   293
   bool check_null_repeat(const BidiIterator& pos, std::size_t max)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   294
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   295
      // this is called when we are about to start a new repeat,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   296
      // if the last one was NULL move our count to max,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   297
      // otherwise save the current position.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   298
      bool result = (count == 0) ? false : (pos == start_pos);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   299
      if(result)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   300
         count = max;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   301
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   302
         start_pos = pos;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   303
      return result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   304
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   305
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   306
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   307
struct saved_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   308
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   309
enum saved_state_type
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   310
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   311
   saved_type_end = 0,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   312
   saved_type_paren = 1,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   313
   saved_type_recurse = 2,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   314
   saved_type_assertion = 3,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   315
   saved_state_alt = 4,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   316
   saved_state_repeater_count = 5,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   317
   saved_state_extra_block = 6,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   318
   saved_state_greedy_single_repeat = 7,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   319
   saved_state_rep_slow_dot = 8,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   320
   saved_state_rep_fast_dot = 9,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   321
   saved_state_rep_char = 10,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   322
   saved_state_rep_short_set = 11,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   323
   saved_state_rep_long_set = 12,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   324
   saved_state_non_greedy_long_repeat = 13, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   325
   saved_state_count = 14
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   326
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   327
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   328
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   329
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   330
#pragma warning(disable : 4251 4231 4660)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   331
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   332
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   333
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   334
class perl_matcher
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   335
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   336
public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   337
   typedef typename traits::char_type char_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   338
   typedef perl_matcher<BidiIterator, Allocator, traits> self_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   339
   typedef bool (self_type::*matcher_proc_type)(void);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   340
   typedef std::size_t traits_size_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   341
   typedef typename is_byte<char_type>::width_type width_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   342
   typedef typename regex_iterator_traits<BidiIterator>::difference_type difference_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   343
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   344
   perl_matcher(BidiIterator first, BidiIterator end, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   345
      match_results<BidiIterator, Allocator>& what, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   346
      const basic_regex<char_type, traits>& e,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   347
      match_flag_type f,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   348
      BidiIterator l_base)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   349
      :  m_result(what), base(first), last(end), 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   350
         position(first), backstop(l_base), re(e), traits_inst(e.get_traits()), 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   351
         m_independent(false), next_count(&rep_obj), rep_obj(&next_count)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   352
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   353
      construct_init(e, f);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   354
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   355
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   356
   bool match();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   357
   bool find();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   358
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   359
   void setf(match_flag_type f)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   360
   { m_match_flags |= f; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   361
   void unsetf(match_flag_type f)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   362
   { m_match_flags &= ~f; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   363
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   364
private:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   365
   void construct_init(const basic_regex<char_type, traits>& e, match_flag_type f);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   366
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   367
   bool find_imp();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   368
   bool match_imp();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   369
#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   370
   typedef bool (perl_matcher::*protected_proc_type)();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   371
   bool protected_call(protected_proc_type);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   372
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   373
   void estimate_max_state_count(std::random_access_iterator_tag*);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   374
   void estimate_max_state_count(void*);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   375
   bool match_prefix();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   376
   bool match_all_states();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   377
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   378
   // match procs, stored in s_match_vtable:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   379
   bool match_startmark();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   380
   bool match_endmark();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   381
   bool match_literal();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   382
   bool match_start_line();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   383
   bool match_end_line();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   384
   bool match_wild();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   385
   bool match_match();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   386
   bool match_word_boundary();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   387
   bool match_within_word();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   388
   bool match_word_start();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   389
   bool match_word_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   390
   bool match_buffer_start();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   391
   bool match_buffer_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   392
   bool match_backref();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   393
   bool match_long_set();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   394
   bool match_set();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   395
   bool match_jump();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   396
   bool match_alt();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   397
   bool match_rep();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   398
   bool match_combining();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   399
   bool match_soft_buffer_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   400
   bool match_restart_continue();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   401
   bool match_long_set_repeat();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   402
   bool match_set_repeat();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   403
   bool match_char_repeat();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   404
   bool match_dot_repeat_fast();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   405
   bool match_dot_repeat_slow();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   406
   bool match_backstep();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   407
   bool match_assert_backref();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   408
   bool match_toggle_case();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   409
#ifdef BOOST_REGEX_RECURSIVE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   410
   bool backtrack_till_match(std::size_t count);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   411
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   412
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   413
   // find procs stored in s_find_vtable:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   414
   bool find_restart_any();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   415
   bool find_restart_word();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   416
   bool find_restart_line();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   417
   bool find_restart_buf();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   418
   bool find_restart_lit();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   419
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   420
private:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   421
   // final result structure to be filled in:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   422
   match_results<BidiIterator, Allocator>& m_result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   423
   // temporary result for POSIX matches:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   424
   scoped_ptr<match_results<BidiIterator, Allocator> > m_temp_match;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   425
   // pointer to actual result structure to fill in:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   426
   match_results<BidiIterator, Allocator>* m_presult;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   427
   // start of sequence being searched:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   428
   BidiIterator base;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   429
   // end of sequence being searched:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   430
   BidiIterator last; 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   431
   // current character being examined:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   432
   BidiIterator position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   433
   // where to restart next search after failed match attempt:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   434
   BidiIterator restart;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   435
   // where the current search started from, acts as base for $` during grep:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   436
   BidiIterator search_base;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   437
   // how far we can go back when matching lookbehind:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   438
   BidiIterator backstop;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   439
   // the expression being examined:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   440
   const basic_regex<char_type, traits>& re;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   441
   // the expression's traits class:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   442
   const ::boost::regex_traits_wrapper<traits>& traits_inst;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   443
   // the next state in the machine being matched:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   444
   const re_syntax_base* pstate;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   445
   // matching flags in use:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   446
   match_flag_type m_match_flags;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   447
   // how many states we have examined so far:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   448
   boost::uintmax_t state_count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   449
   // max number of states to examine before giving up:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   450
   boost::uintmax_t max_state_count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   451
   // whether we should ignore case or not:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   452
   bool icase;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   453
   // set to true when (position == last), indicates that we may have a partial match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   454
   bool m_has_partial_match;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   455
   // set to true whenever we get a match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   456
   bool m_has_found_match;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   457
   // set to true whenever we're inside an independent sub-expression:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   458
   bool m_independent;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   459
   // the current repeat being examined:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   460
   repeater_count<BidiIterator>* next_count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   461
   // the first repeat being examined (top of linked list):
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   462
   repeater_count<BidiIterator> rep_obj;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   463
   // the mask to pass when matching word boundaries:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   464
   typename traits::char_class_type m_word_mask;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   465
   // the bitmask to use when determining whether a match_any matches a newline or not:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   466
   unsigned char match_any_mask;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   467
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   468
#ifdef BOOST_REGEX_NON_RECURSIVE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   469
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   470
   // additional members for non-recursive version:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   471
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   472
   typedef bool (self_type::*unwind_proc_type)(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   473
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   474
   void extend_stack();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   475
   bool unwind(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   476
   bool unwind_end(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   477
   bool unwind_paren(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   478
   bool unwind_recursion_stopper(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   479
   bool unwind_assertion(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   480
   bool unwind_alt(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   481
   bool unwind_repeater_counter(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   482
   bool unwind_extra_block(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   483
   bool unwind_greedy_single_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   484
   bool unwind_slow_dot_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   485
   bool unwind_fast_dot_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   486
   bool unwind_char_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   487
   bool unwind_short_set_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   488
   bool unwind_long_set_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   489
   bool unwind_non_greedy_repeat(bool);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   490
   void destroy_single_repeat();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   491
   void push_matched_paren(int index, const sub_match<BidiIterator>& sub);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   492
   void push_recursion_stopper();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   493
   void push_assertion(const re_syntax_base* ps, bool positive);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   494
   void push_alt(const re_syntax_base* ps);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   495
   void push_repeater_count(int i, repeater_count<BidiIterator>** s);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   496
   void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   497
   void push_non_greedy_repeat(const re_syntax_base* ps);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   498
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   499
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   500
   // pointer to base of stack:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   501
   saved_state* m_stack_base;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   502
   // pointer to current stack position:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   503
   saved_state* m_backup_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   504
   // determines what value to return when unwinding from recursion,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   505
   // allows for mixed recursive/non-recursive algorithm:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   506
   bool m_recursive_result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   507
   // how many memory blocks have we used up?:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   508
   unsigned used_block_count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   509
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   510
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   511
   // these operations aren't allowed, so are declared private,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   512
   // bodies are provided to keep explicit-instantiation requests happy:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   513
   perl_matcher& operator=(const perl_matcher&)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   514
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   515
      return *this;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   516
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   517
   perl_matcher(const perl_matcher& that)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   518
      : m_result(that.m_result), re(that.re), traits_inst(that.traits_inst), rep_obj(0) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   519
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   520
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   521
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   522
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   523
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   524
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   525
} // namespace re_detail
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   526
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   527
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   528
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   529
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   530
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   531
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   532
#  include BOOST_ABI_SUFFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   533
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   534
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   535
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   536
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   537
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   538
} // namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   539
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   540
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   541
#  pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   542
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   543
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   544
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   545
// include the implementation of perl_matcher:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   546
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   547
#ifdef BOOST_REGEX_RECURSIVE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   548
#include <boost/regex/v4/perl_matcher_recursive.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   549
#else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   550
#include <boost/regex/v4/perl_matcher_non_recursive.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   551
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   552
// this one has to be last:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   553
#include <boost/regex/v4/perl_matcher_common.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   554
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   555
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   556