Ignore:
Timestamp:
Sep 8, 2017, 8:09:27 AM (2 years ago)
Author:
cameron
Message:

Small fixes

File:
1 edited

Legend:

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

    r5565 r5631  
    11#include "re_collect_unicodesets.h"
    22#include <re/re_name.h>
     3#include <re/re_any.h>
     4#include <re/re_start.h>
     5#include <re/re_end.h>
    36#include <re/re_alt.h>
    47#include <re/re_cc.h>
     
    2124
    2225namespace re {
     26   
     27class SetCollector {
     28public:
     29    void collect_UnicodeSets(RE * re, std::vector<UCD::UnicodeSet> & UnicodeSets);
     30private:
     31    flat_set<Name *>        mVisited;
     32};
    2333
    24 flat_set<Name *>        mVisited;
    25 
    26 void collect_UnicodeSets(RE * re, std::vector<UCD::UnicodeSet> & UnicodeSets) {
     34void SetCollector::collect_UnicodeSets(RE * re, std::vector<UCD::UnicodeSet> & UnicodeSets) {
    2735    assert ("RE object cannot be null!" && re);
    28     if (isa<Name>(re)) {
     36    if (CC * cc = dyn_cast<CC>(re)) {
     37        UnicodeSets.push_back(* cast<UCD::UnicodeSet>(cc));
     38    } else if (isa<Name>(re)) {
    2939        if (mVisited.insert(cast<Name>(re)).second) {
    30             if (CC * cc = dyn_cast<CC>(cast<Name>(re)->getDefinition())) {
    31                 UnicodeSets.push_back(* cast<UCD::UnicodeSet>(cc));
    32             } else {
    33                 collect_UnicodeSets(cast<Name>(re)->getDefinition(), UnicodeSets);
    34             }
     40            collect_UnicodeSets(cast<Name>(re)->getDefinition(), UnicodeSets);
    3541        }
    3642    } else if (isa<Seq>(re)) {
     
    5258        collect_UnicodeSets(cast<Intersect>(re)->getLH(), UnicodeSets);
    5359        collect_UnicodeSets(cast<Intersect>(re)->getRH(), UnicodeSets);
     60    } else if (isa<Any>(re)) {
     61        UnicodeSets.push_back(UCD::UnicodeSet(0x00, 0x10FFFF));
     62    } else if (isa<Start>(re)) {
     63        // LineBreak set handled globally
     64    } else if (isa<End>(re)) {
     65        // LineBreak set handled globally
    5466    }
     67}
     68   
     69std::vector<UCD::UnicodeSet> collect_UnicodeSets(RE * re) {
     70    SetCollector collector;
     71    std::vector<UCD::UnicodeSet> UnicodeSets;
     72    collector.collect_UnicodeSets(re, UnicodeSets);
     73    return UnicodeSets;
    5574}
    5675
Note: See TracChangeset for help on using the changeset viewer.