Merge changes from Trunk ready for 1.37.

[SVN r48796]
This commit is contained in:
John Maddock
2008-09-16 11:54:24 +00:00
parent 756a875620
commit 5471176846
18 changed files with 148 additions and 112 deletions

View File

@ -248,7 +248,7 @@ class repeater_count
{
repeater_count** stack;
repeater_count* next;
int id;
int state_id;
std::size_t count; // the number of iterations so far
BidiIterator start_pos; // where the last repeat started
public:
@ -256,22 +256,22 @@ public:
{
stack = s;
next = 0;
id = -1;
state_id = -1;
count = 0;
}
repeater_count(int i, repeater_count** s, BidiIterator start)
: start_pos(start)
{
id = i;
state_id = i;
stack = s;
next = *stack;
*stack = this;
if(id > next->id)
if(state_id > next->state_id)
count = 0;
else
{
repeater_count* p = next;
while(p->id != id)
while(p->state_id != state_id)
p = p->next;
count = p->count;
start_pos = p->start_pos;
@ -282,7 +282,7 @@ public:
*stack = next;
}
std::size_t get_count() { return count; }
int get_id() { return id; }
int get_id() { return state_id; }
std::size_t operator++() { return ++count; }
bool check_null_repeat(const BidiIterator& pos, std::size_t max)
{
@ -331,7 +331,7 @@ public:
typedef typename traits::char_type char_type;
typedef perl_matcher<BidiIterator, Allocator, traits> self_type;
typedef bool (self_type::*matcher_proc_type)(void);
typedef typename traits::size_type traits_size_type;
typedef std::size_t traits_size_type;
typedef typename is_byte<char_type>::width_type width_type;
typedef typename regex_iterator_traits<BidiIterator>::difference_type difference_type;
@ -487,7 +487,7 @@ private:
void push_assertion(const re_syntax_base* ps, bool positive);
void push_alt(const re_syntax_base* ps);
void push_repeater_count(int i, repeater_count<BidiIterator>** s);
void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int id);
void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id);
void push_non_greedy_repeat(const re_syntax_base* ps);