summaryrefslogtreecommitdiff
path: root/src/piraha/Multi.cc
blob: d07336189d4d273fd0239c006a1fb7fb1cde861c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include "Piraha.hpp"

using namespace piraha;

bool Multi::match(Matcher *m) {
    unsigned int save;
    int iter = 0;
    vector<smart_ptr<Group> > chSave;
    while(true) {
        save = m->pos;
        chSave = m->children;
        if(!pattern->match(m)) {
            m->children = chSave;
            m->pos = save;
            break;
        }
        if(save - m->pos == 0) {
            std::cout << "ZERO ADVANCE IN MULTI!" << std::endl;
            return minv <= iter && iter <= maxv;
        }
        iter++;
        if(iter == maxv)
            break;
    }
    return minv <= iter && iter <= maxv;
}