Ignore:
Timestamp:
Jan 25, 2015, 1:42:55 PM (4 years ago)
Author:
cameron
Message:

Simple if-insertion strategy at starDepth 0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_analysis.cpp

    r4415 r4442  
    1111#include "re_intersect.h"
    1212#include "re_assertion.h"
     13#include <limits.h>
    1314
    1415namespace re {
     
    8081    return false; // otherwise
    8182}
    82    
     83   
     84int minMatchLength(RE * re) {
     85    if (Alt * alt = dyn_cast<Alt>(re)) {
     86        int minAltLength = INT_MAX;
     87        for (RE * re : *alt) {
     88            minAltLength = std::min(minAltLength, minMatchLength(re));
     89        }
     90        return minAltLength;
     91    }
     92    else if (Seq * seq = dyn_cast<Seq>(re)) {
     93        int minSeqLength = 0;
     94        for (RE * re : *seq) {
     95            minSeqLength += minMatchLength(re);
     96        }
     97        return minSeqLength;
     98    }
     99    else if (Rep * rep = dyn_cast<Rep>(re)) {
     100        if (rep->getLB() == 0) return 0;
     101        else return (rep->getLB()) * minMatchLength(rep->getRE());
     102    }
     103    else if (isa<Assertion>(re)) {
     104        return 0;
     105    }
     106    else if (Diff * diff = dyn_cast<Diff>(re)) {
     107        return minMatchLength(diff->getLH());
     108    }
     109    else if (Intersect * e = dyn_cast<Intersect>(re)) {
     110        return std::min(minMatchLength(e->getLH()), minMatchLength(e->getRH()));
     111    }
     112    else if (isa<Any>(re)) {
     113        return 1;
     114    }
     115    else if (isa<Name>(re)) {
     116        return 1;
     117    }
     118    return 0; // otherwise
    83119}
     120
     121
     122}
Note: See TracChangeset for help on using the changeset viewer.