imgtools/imglib/boostlibrary/boost/regex/v4/perl_matcher_common.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
 /*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    13
  *   LOCATION:    see http://www.boost.org for most recent version.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    14
  *   FILE         perl_matcher_common.cpp
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    15
  *   VERSION      see <boost/version.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    16
  *   DESCRIPTION: Definitions of perl_matcher member functions that are 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    17
  *                common to both the recursive and non-recursive versions.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    18
  */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    19
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    20
#ifndef BOOST_REGEX_V4_PERL_MATCHER_COMMON_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    21
#define BOOST_REGEX_V4_PERL_MATCHER_COMMON_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    22
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    23
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    24
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    25
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    26
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    27
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    28
#  include BOOST_ABI_PREFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    29
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    30
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    31
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    32
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    33
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    34
#ifdef __BORLANDC__
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    35
#  pragma option push -w-8008 -w-8066
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    36
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    37
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    38
#  pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    39
#  pragma warning(disable: 4800)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    40
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    41
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    42
namespace boost{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    43
namespace re_detail{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    44
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    45
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    46
void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_regex<char_type, traits>& e, match_flag_type f)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    47
{ 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    48
   typedef typename regex_iterator_traits<BidiIterator>::iterator_category category;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    49
   typedef typename basic_regex<char_type, traits>::flag_type expression_flag_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    50
   
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    51
   if(e.empty())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    52
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    53
      // precondition failure: e is not a valid regex.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    54
      std::invalid_argument ex("Invalid regular expression object");
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    55
      boost::throw_exception(ex);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    56
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    57
   pstate = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    58
   m_match_flags = f;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    59
   estimate_max_state_count(static_cast<category*>(0));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    60
   expression_flag_type re_f = re.flags();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    61
   icase = re_f & regex_constants::icase;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    62
   if(!(m_match_flags & (match_perl|match_posix)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    63
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    64
      if((re_f & (regbase::main_option_type|regbase::no_perl_ex)) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    65
         m_match_flags |= match_perl;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    66
      else if((re_f & (regbase::main_option_type|regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    67
         m_match_flags |= match_perl;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    68
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    69
         m_match_flags |= match_posix;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    70
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    71
   if(m_match_flags & match_posix)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    72
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    73
      m_temp_match.reset(new match_results<BidiIterator, Allocator>());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    74
      m_presult = m_temp_match.get();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    75
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    76
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    77
      m_presult = &m_result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    78
#ifdef BOOST_REGEX_NON_RECURSIVE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    79
   m_stack_base = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    80
   m_backup_state = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    81
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    82
   // find the value to use for matching word boundaries:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    83
   m_word_mask = re.get_data().m_word_mask; 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    84
   // find bitmask to use for matching '.':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    85
   match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? re_detail::test_not_newline : re_detail::test_newline);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    86
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    87
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    88
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    89
void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std::random_access_iterator_tag*)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    90
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    91
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    92
   // How many states should we allow our machine to visit before giving up?
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    93
   // This is a heuristic: it takes the greater of O(N^2) and O(NS^2)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    94
   // where N is the length of the string, and S is the number of states
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    95
   // in the machine.  It's tempting to up this to O(N^2S) or even O(N^2S^2)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    96
   // but these take unreasonably amounts of time to bale out in pathological
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    97
   // cases.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    98
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    99
   // Calculate NS^2 first:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   100
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   101
   static const boost::uintmax_t k = 100000;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   102
   boost::uintmax_t dist = boost::re_detail::distance(base, last);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   103
   if(dist == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   104
      dist = 1;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   105
   boost::uintmax_t states = re.size();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   106
   if(states == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   107
      states = 1;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   108
   states *= states;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   109
   if((std::numeric_limits<boost::uintmax_t>::max)() / dist < states)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   110
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   111
      max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   112
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   113
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   114
   states *= dist;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   115
   if((std::numeric_limits<boost::uintmax_t>::max)() - k < states)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   116
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   117
      max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   118
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   119
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   120
   states += k;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   121
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   122
   max_state_count = states;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   123
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   124
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   125
   // Now calculate N^2:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   126
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   127
   states = dist;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   128
   if((std::numeric_limits<boost::uintmax_t>::max)() / dist < states)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   129
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   130
      max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   131
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   132
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   133
   states *= dist;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   134
   if((std::numeric_limits<boost::uintmax_t>::max)() - k < states)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   135
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   136
      max_state_count = (std::numeric_limits<boost::uintmax_t>::max)() - 2;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   137
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   138
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   139
   states += k;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   140
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   141
   // N^2 can be a very large number indeed, to prevent things getting out
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   142
   // of control, cap the max states:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   143
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   144
   if(states > BOOST_REGEX_MAX_STATE_COUNT)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   145
      states = BOOST_REGEX_MAX_STATE_COUNT;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   146
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   147
   // If (the possibly capped) N^2 is larger than our first estimate,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   148
   // use this instead:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   149
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   150
   if(states > max_state_count)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   151
      max_state_count = states;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   152
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   153
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   154
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   155
inline void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(void*)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   156
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   157
   // we don't know how long the sequence is:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   158
   max_state_count = BOOST_REGEX_MAX_STATE_COUNT;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   159
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   160
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   161
#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   162
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   163
inline bool perl_matcher<BidiIterator, Allocator, traits>::protected_call(
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   164
   protected_proc_type proc)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   165
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   166
   ::boost::re_detail::concrete_protected_call
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   167
      <perl_matcher<BidiIterator, Allocator, traits> >
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   168
      obj(this, proc);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   169
   return obj.execute();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   170
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   171
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   172
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   173
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   174
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   175
inline bool perl_matcher<BidiIterator, Allocator, traits>::match()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   176
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   177
#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   178
   return protected_call(&perl_matcher<BidiIterator, Allocator, traits>::match_imp);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   179
#else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   180
   return match_imp();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   181
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   182
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   183
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   184
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   185
bool perl_matcher<BidiIterator, Allocator, traits>::match_imp()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   186
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   187
   // initialise our stack if we are non-recursive:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   188
#ifdef BOOST_REGEX_NON_RECURSIVE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   189
   save_state_init init(&m_stack_base, &m_backup_state);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   190
   used_block_count = BOOST_REGEX_MAX_BLOCKS;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   191
#if !defined(BOOST_NO_EXCEPTIONS)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   192
   try{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   193
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   194
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   195
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   196
   // reset our state machine:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   197
   position = base;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   198
   search_base = base;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   199
   state_count = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   200
   m_match_flags |= regex_constants::match_all;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   201
   m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), search_base, last);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   202
   m_presult->set_base(base);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   203
   if(m_match_flags & match_posix)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   204
      m_result = *m_presult;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   205
   verify_options(re.flags(), m_match_flags);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   206
   if(0 == match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   207
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   208
   return m_result[0].second == last;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   209
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   210
#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_NO_EXCEPTIONS)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   211
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   212
   catch(...)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   213
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   214
      // unwind all pushed states, apart from anything else this
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   215
      // ensures that all the states are correctly destructed
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   216
      // not just the memory freed.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   217
      while(unwind(true)){}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   218
      throw;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   219
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   220
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   221
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   222
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   223
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   224
inline bool perl_matcher<BidiIterator, Allocator, traits>::find()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   225
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   226
#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   227
   return protected_call(&perl_matcher<BidiIterator, Allocator, traits>::find_imp);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   228
#else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   229
   return find_imp();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   230
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   231
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   232
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   233
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   234
bool perl_matcher<BidiIterator, Allocator, traits>::find_imp()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   235
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   236
   static matcher_proc_type const s_find_vtable[7] = 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   237
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   238
      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_any,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   239
      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_word,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   240
      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_line,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   241
      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   242
      &perl_matcher<BidiIterator, Allocator, traits>::match_prefix,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   243
      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   244
      &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   245
   };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   246
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   247
   // initialise our stack if we are non-recursive:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   248
#ifdef BOOST_REGEX_NON_RECURSIVE
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   249
   save_state_init init(&m_stack_base, &m_backup_state);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   250
   used_block_count = BOOST_REGEX_MAX_BLOCKS;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   251
#if !defined(BOOST_NO_EXCEPTIONS)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   252
   try{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   253
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   254
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   255
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   256
   state_count = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   257
   if((m_match_flags & regex_constants::match_init) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   258
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   259
      // reset our state machine:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   260
      search_base = position = base;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   261
      pstate = re.get_first_state();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   262
      m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), base, last);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   263
      m_presult->set_base(base);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   264
      m_match_flags |= regex_constants::match_init;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   265
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   266
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   267
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   268
      // start again:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   269
      search_base = position = m_result[0].second;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   270
      // If last match was null and match_not_null was not set then increment
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   271
      // our start position, otherwise we go into an infinite loop:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   272
      if(((m_match_flags & match_not_null) == 0) && (m_result.length() == 0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   273
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   274
         if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   275
            return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   276
         else 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   277
            ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   278
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   279
      // reset $` start:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   280
      m_presult->set_size((m_match_flags & match_nosubs) ? 1 : re.mark_count(), search_base, last);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   281
      //if((base != search_base) && (base == backstop))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   282
      //   m_match_flags |= match_prev_avail;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   283
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   284
   if(m_match_flags & match_posix)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   285
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   286
      m_result.set_size(re.mark_count(), base, last);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   287
      m_result.set_base(base);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   288
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   289
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   290
   verify_options(re.flags(), m_match_flags);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   291
   // find out what kind of expression we have:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   292
   unsigned type = (m_match_flags & match_continuous) ? 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   293
      static_cast<unsigned int>(regbase::restart_continue) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   294
         : static_cast<unsigned int>(re.get_restart_type());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   295
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   296
   // call the appropriate search routine:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   297
   matcher_proc_type proc = s_find_vtable[type];
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   298
   return (this->*proc)();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   299
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   300
#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_NO_EXCEPTIONS)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   301
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   302
   catch(...)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   303
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   304
      // unwind all pushed states, apart from anything else this
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   305
      // ensures that all the states are correctly destructed
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   306
      // not just the memory freed.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   307
      while(unwind(true)){}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   308
      throw;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   309
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   310
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   311
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   312
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   313
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   314
bool perl_matcher<BidiIterator, Allocator, traits>::match_prefix()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   315
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   316
   m_has_partial_match = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   317
   m_has_found_match = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   318
   pstate = re.get_first_state();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   319
   m_presult->set_first(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   320
   restart = position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   321
   match_all_states();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   322
   if(!m_has_found_match && m_has_partial_match && (m_match_flags & match_partial))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   323
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   324
      m_has_found_match = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   325
      m_presult->set_second(last, 0, false);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   326
      position = last;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   327
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   328
#ifdef BOOST_REGEX_MATCH_EXTRA
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   329
   if(m_has_found_match && (match_extra & m_match_flags))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   330
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   331
      //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   332
      // we have a match, reverse the capture information:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   333
      //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   334
      for(unsigned i = 0; i < m_presult->size(); ++i)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   335
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   336
         typename sub_match<BidiIterator>::capture_sequence_type & seq = ((*m_presult)[i]).get_captures();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   337
         std::reverse(seq.begin(), seq.end());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   338
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   339
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   340
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   341
   if(!m_has_found_match)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   342
      position = restart; // reset search postion
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   343
   return m_has_found_match;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   344
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   345
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   346
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   347
bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   348
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   349
   int index = static_cast<const re_brace*>(pstate)->index;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   350
   if(index > 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   351
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   352
      if((m_match_flags & match_nosubs) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   353
         m_presult->set_second(position, index);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   354
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   355
   else if((index < 0) && (index != -4))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   356
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   357
      // matched forward lookahead:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   358
      pstate = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   359
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   360
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   361
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   362
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   363
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   364
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   365
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   366
bool perl_matcher<BidiIterator, Allocator, traits>::match_literal()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   367
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   368
   unsigned int len = static_cast<const re_literal*>(pstate)->length;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   369
   const char_type* what = reinterpret_cast<const char_type*>(static_cast<const re_literal*>(pstate) + 1);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   370
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   371
   // compare string with what we stored in
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   372
   // our records:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   373
   for(unsigned int i = 0; i < len; ++i, ++position)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   374
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   375
      if((position == last) || (traits_inst.translate(*position, icase) != what[i]))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   376
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   377
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   378
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   379
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   380
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   381
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   382
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   383
bool perl_matcher<BidiIterator, Allocator, traits>::match_start_line()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   384
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   385
   if(position == backstop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   386
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   387
      if((m_match_flags & match_prev_avail) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   388
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   389
         if((m_match_flags & match_not_bol) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   390
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   391
            pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   392
            return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   393
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   394
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   395
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   396
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   397
   else if(m_match_flags & match_single_line)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   398
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   399
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   400
   // check the previous value character:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   401
   BidiIterator t(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   402
   --t;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   403
   if(position != last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   404
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   405
      if(is_separator(*t) && !((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n'))) )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   406
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   407
         pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   408
         return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   409
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   410
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   411
   else if(is_separator(*t))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   412
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   413
      pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   414
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   415
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   416
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   417
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   418
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   419
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   420
bool perl_matcher<BidiIterator, Allocator, traits>::match_end_line()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   421
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   422
   if(position != last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   423
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   424
      if(m_match_flags & match_single_line)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   425
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   426
      // we're not yet at the end so *first is always valid:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   427
      if(is_separator(*position))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   428
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   429
         if((position != backstop) || (m_match_flags & match_prev_avail))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   430
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   431
            // check that we're not in the middle of \r\n sequence
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   432
            BidiIterator t(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   433
            --t;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   434
            if((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n')))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   435
            {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   436
               return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   437
            }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   438
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   439
         pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   440
         return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   441
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   442
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   443
   else if((m_match_flags & match_not_eol) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   444
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   445
      pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   446
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   447
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   448
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   449
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   450
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   451
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   452
bool perl_matcher<BidiIterator, Allocator, traits>::match_wild()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   453
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   454
   if(position == last) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   455
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   456
   if(is_separator(*position) && ((match_any_mask & static_cast<const re_dot*>(pstate)->mask) == 0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   457
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   458
   if((*position == char_type(0)) && (m_match_flags & match_not_dot_null))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   459
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   460
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   461
   ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   462
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   463
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   464
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   465
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   466
bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   467
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   468
   if((m_match_flags & match_not_null) && (position == (*m_presult)[0].first))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   469
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   470
   if((m_match_flags & match_all) && (position != last))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   471
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   472
   if((m_match_flags & regex_constants::match_not_initial_null) && (position == search_base))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   473
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   474
   m_presult->set_second(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   475
   pstate = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   476
   m_has_found_match = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   477
   if((m_match_flags & match_posix) == match_posix)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   478
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   479
      m_result.maybe_assign(*m_presult);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   480
      if((m_match_flags & match_any) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   481
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   482
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   483
#ifdef BOOST_REGEX_MATCH_EXTRA
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   484
   if(match_extra & m_match_flags)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   485
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   486
      for(unsigned i = 0; i < m_presult->size(); ++i)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   487
         if((*m_presult)[i].matched)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   488
            ((*m_presult)[i]).get_captures().push_back((*m_presult)[i]);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   489
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   490
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   491
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   492
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   493
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   494
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   495
bool perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   496
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   497
   bool b; // indcates whether next character is a word character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   498
   if(position != last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   499
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   500
      // prev and this character must be opposites:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   501
   #if defined(BOOST_REGEX_USE_C_LOCALE) && defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   502
      b = traits::isctype(*position, m_word_mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   503
   #else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   504
      b = traits_inst.isctype(*position, m_word_mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   505
   #endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   506
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   507
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   508
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   509
      b = (m_match_flags & match_not_eow) ? true : false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   510
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   511
   if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   512
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   513
      if(m_match_flags & match_not_bow)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   514
         b ^= true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   515
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   516
         b ^= false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   517
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   518
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   519
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   520
      --position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   521
      b ^= traits_inst.isctype(*position, m_word_mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   522
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   523
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   524
   if(b)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   525
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   526
      pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   527
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   528
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   529
   return false; // no match if we get to here...
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   530
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   531
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   532
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   533
bool perl_matcher<BidiIterator, Allocator, traits>::match_within_word()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   534
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   535
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   536
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   537
   // both prev and this character must be m_word_mask:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   538
   bool prev = traits_inst.isctype(*position, m_word_mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   539
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   540
      bool b;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   541
      if((position == backstop) && ((m_match_flags & match_prev_avail) == 0)) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   542
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   543
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   544
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   545
         --position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   546
         b = traits_inst.isctype(*position, m_word_mask);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   547
         ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   548
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   549
      if(b == prev)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   550
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   551
         pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   552
         return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   553
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   554
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   555
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   556
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   557
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   558
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   559
bool perl_matcher<BidiIterator, Allocator, traits>::match_word_start()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   560
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   561
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   562
      return false; // can't be starting a word if we're already at the end of input
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   563
   if(!traits_inst.isctype(*position, m_word_mask))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   564
      return false; // next character isn't a word character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   565
   if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   566
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   567
      if(m_match_flags & match_not_bow)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   568
         return false; // no previous input
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   569
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   570
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   571
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   572
      // otherwise inside buffer:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   573
      BidiIterator t(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   574
      --t;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   575
      if(traits_inst.isctype(*t, m_word_mask))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   576
         return false; // previous character not non-word
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   577
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   578
   // OK we have a match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   579
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   580
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   581
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   582
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   583
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   584
bool perl_matcher<BidiIterator, Allocator, traits>::match_word_end()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   585
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   586
   if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   587
      return false;  // start of buffer can't be end of word
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   588
   BidiIterator t(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   589
   --t;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   590
   if(traits_inst.isctype(*t, m_word_mask) == false)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   591
      return false;  // previous character wasn't a word character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   592
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   593
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   594
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   595
      if(m_match_flags & match_not_eow)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   596
         return false; // end of buffer but not end of word
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   597
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   598
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   599
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   600
      // otherwise inside buffer:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   601
      if(traits_inst.isctype(*position, m_word_mask))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   602
         return false; // next character is a word character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   603
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   604
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   605
   return true;      // if we fall through to here then we've succeeded
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   606
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   607
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   608
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   609
bool perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   610
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   611
   if((position != backstop) || (m_match_flags & match_not_bob))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   612
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   613
   // OK match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   614
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   615
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   616
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   617
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   618
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   619
bool perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   620
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   621
   if((position != last) || (m_match_flags & match_not_eob))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   622
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   623
   // OK match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   624
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   625
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   626
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   627
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   628
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   629
bool perl_matcher<BidiIterator, Allocator, traits>::match_backref()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   630
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   631
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   632
   // Compare with what we previously matched.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   633
   // Note that this succeeds if the backref did not partisipate
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   634
   // in the match, this is in line with ECMAScript, but not Perl
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   635
   // or PCRE.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   636
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   637
   BidiIterator i = (*m_presult)[static_cast<const re_brace*>(pstate)->index].first;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   638
   BidiIterator j = (*m_presult)[static_cast<const re_brace*>(pstate)->index].second;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   639
   while(i != j)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   640
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   641
      if((position == last) || (traits_inst.translate(*position, icase) != traits_inst.translate(*i, icase)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   642
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   643
      ++i;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   644
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   645
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   646
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   647
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   648
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   649
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   650
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   651
bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   652
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   653
   typedef typename traits::char_class_type char_class_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   654
   // let the traits class do the work:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   655
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   656
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   657
   BidiIterator t = re_is_set_member(position, last, static_cast<const re_set_long<char_class_type>*>(pstate), re.get_data(), icase);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   658
   if(t != position)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   659
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   660
      pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   661
      position = t;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   662
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   663
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   664
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   665
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   666
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   667
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   668
bool perl_matcher<BidiIterator, Allocator, traits>::match_set()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   669
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   670
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   671
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   672
   if(static_cast<const re_set*>(pstate)->_map[static_cast<unsigned char>(traits_inst.translate(*position, icase))])
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   673
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   674
      pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   675
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   676
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   677
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   678
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   679
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   680
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   681
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   682
bool perl_matcher<BidiIterator, Allocator, traits>::match_jump()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   683
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   684
   pstate = static_cast<const re_jump*>(pstate)->alt.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   685
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   686
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   687
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   688
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   689
bool perl_matcher<BidiIterator, Allocator, traits>::match_combining()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   690
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   691
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   692
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   693
   if(is_combining(traits_inst.translate(*position, icase)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   694
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   695
   ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   696
   while((position != last) && is_combining(traits_inst.translate(*position, icase)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   697
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   698
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   699
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   700
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   701
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   702
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   703
bool perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   704
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   705
   if(m_match_flags & match_not_eob)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   706
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   707
   BidiIterator p(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   708
   while((p != last) && is_separator(traits_inst.translate(*p, icase)))++p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   709
   if(p != last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   710
      return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   711
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   712
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   713
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   714
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   715
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   716
bool perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   717
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   718
   if(position == search_base)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   719
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   720
      pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   721
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   722
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   723
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   724
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   725
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   726
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   727
bool perl_matcher<BidiIterator, Allocator, traits>::match_backstep()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   728
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   729
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   730
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   731
#pragma warning(disable:4127)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   732
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   733
   if( ::boost::is_random_access_iterator<BidiIterator>::value)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   734
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   735
      std::ptrdiff_t maxlen = ::boost::re_detail::distance(backstop, position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   736
      if(maxlen < static_cast<const re_brace*>(pstate)->index)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   737
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   738
      std::advance(position, -static_cast<const re_brace*>(pstate)->index);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   739
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   740
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   741
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   742
      int c = static_cast<const re_brace*>(pstate)->index;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   743
      while(c--)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   744
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   745
         if(position == backstop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   746
            return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   747
         --position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   748
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   749
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   750
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   751
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   752
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   753
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   754
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   755
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   756
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   757
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   758
inline bool perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   759
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   760
   // return true if marked sub-expression N has been matched:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   761
   bool result = (*m_presult)[static_cast<const re_brace*>(pstate)->index].matched;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   762
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   763
   return result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   764
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   765
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   766
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   767
bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   768
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   769
   // change our case sensitivity:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   770
   this->icase = static_cast<const re_case*>(pstate)->icase;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   771
   pstate = pstate->next.p;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   772
   return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   773
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   774
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   775
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   776
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   777
bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_any()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   778
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   779
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   780
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   781
#pragma warning(disable:4127)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   782
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   783
   const unsigned char* _map = re.get_map();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   784
   while(true)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   785
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   786
      // skip everything we can't match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   787
      while((position != last) && !can_start(*position, _map, (unsigned char)mask_any) )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   788
         ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   789
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   790
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   791
         // run out of characters, try a null match if possible:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   792
         if(re.can_be_null())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   793
            return match_prefix();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   794
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   795
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   796
      // now try and obtain a match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   797
      if(match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   798
         return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   799
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   800
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   801
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   802
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   803
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   804
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   805
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   806
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   807
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   808
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   809
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   810
bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_word()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   811
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   812
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   813
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   814
#pragma warning(disable:4127)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   815
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   816
   // do search optimised for word starts:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   817
   const unsigned char* _map = re.get_map();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   818
   if((m_match_flags & match_prev_avail) || (position != base))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   819
      --position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   820
   else if(match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   821
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   822
   do
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   823
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   824
      while((position != last) && traits_inst.isctype(*position, m_word_mask))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   825
         ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   826
      while((position != last) && !traits_inst.isctype(*position, m_word_mask))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   827
         ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   828
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   829
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   830
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   831
      if(can_start(*position, _map, (unsigned char)mask_any) )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   832
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   833
         if(match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   834
            return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   835
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   836
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   837
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   838
   } while(true);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   839
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   840
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   841
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   842
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   843
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   844
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   845
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   846
bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_line()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   847
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   848
   // do search optimised for line starts:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   849
   const unsigned char* _map = re.get_map();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   850
   if(match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   851
      return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   852
   while(position != last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   853
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   854
      while((position != last) && !is_separator(*position))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   855
         ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   856
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   857
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   858
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   859
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   860
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   861
         if(re.can_be_null() && match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   862
            return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   863
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   864
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   865
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   866
      if( can_start(*position, _map, (unsigned char)mask_any) )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   867
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   868
         if(match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   869
            return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   870
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   871
      if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   872
         return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   873
      //++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   874
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   875
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   876
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   877
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   878
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   879
bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   880
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   881
   if((position == base) && ((m_match_flags & match_not_bob) == 0))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   882
      return match_prefix();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   883
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   884
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   885
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   886
template <class BidiIterator, class Allocator, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   887
bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   888
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   889
#if 0
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   890
   if(position == last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   891
      return false; // can't possibly match if we're at the end already
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   892
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   893
   unsigned type = (m_match_flags & match_continuous) ? 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   894
      static_cast<unsigned int>(regbase::restart_continue) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   895
         : static_cast<unsigned int>(re.get_restart_type());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   896
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   897
   const kmp_info<char_type>* info = access::get_kmp(re);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   898
   int len = info->len;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   899
   const char_type* x = info->pstr;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   900
   int j = 0; 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   901
   while (position != last) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   902
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   903
      while((j > -1) && (x[j] != traits_inst.translate(*position, icase))) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   904
         j = info->kmp_next[j];
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   905
      ++position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   906
      ++j;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   907
      if(j >= len) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   908
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   909
         if(type == regbase::restart_fixed_lit)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   910
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   911
            std::advance(position, -j);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   912
            restart = position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   913
            std::advance(restart, len);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   914
            m_result.set_first(position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   915
            m_result.set_second(restart);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   916
            position = restart;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   917
            return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   918
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   919
         else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   920
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   921
            restart = position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   922
            std::advance(position, -j);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   923
            if(match_prefix())
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   924
               return true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   925
            else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   926
            {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   927
               for(int k = 0; (restart != position) && (k < j); ++k, --restart)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   928
                     {} // dwa 10/20/2000 - warning suppression for MWCW
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   929
               if(restart != last)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   930
                  ++restart;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   931
               position = restart;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   932
               j = 0;  //we could do better than this...
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   933
            }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   934
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   935
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   936
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   937
   if((m_match_flags & match_partial) && (position == last) && j)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   938
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   939
      // we need to check for a partial match:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   940
      restart = position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   941
      std::advance(position, -j);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   942
      return match_prefix();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   943
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   944
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   945
   return false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   946
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   947
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   948
} // namespace re_detail
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   949
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   950
} // namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   951
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   952
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   953
#  pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   954
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   955
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   956
#ifdef __BORLANDC__
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   957
#  pragma option pop
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   958
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   959
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   960
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   961
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   962
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   963
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   964
#  include BOOST_ABI_SUFFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   965
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   966
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   967
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   968
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   969
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   970
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   971