Ignore:
Timestamp:
Oct 3, 2015, 3:31:16 PM (4 years ago)
Author:
nmedfort
Message:

Added union/diff/intersection functionality to RE_Compiler. Removed toUTF8 pass in favour of using the UCD_Compiler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_cc.h

    r4812 r4814  
    2222enum CC_type {UnicodeClass, ByteClass};
    2323
    24 class CC : public RE {
     24class CC : public RE, public UCD::UnicodeSet {
    2525public:
    2626
     
    3232    }
    3333
    34     using iterator = UCD::UnicodeSet::iterator;
    35     using size_type = UCD::UnicodeSet::size_type;
    3634
    3735    std::string canonicalName(const CC_type type) const;
    3836
    3937    inline codepoint_t min_codepoint() const {
    40         return mSparseCharSet.front().first;
     38        return front().first;
    4139    }
    4240
    4341    inline codepoint_t max_codepoint() const {
    44         return mSparseCharSet.back().second;
    45     }
    46 
    47     void insert_range(const codepoint_t lo, const codepoint_t hi) {
    48         mSparseCharSet.insert_range(lo, hi);
    49     }
    50 
    51     inline void insert(const codepoint_t codepoint) {
    52         mSparseCharSet.insert(codepoint);
    53     }
    54 
    55     inline iterator begin() const {
    56         return mSparseCharSet.begin();
    57     }
    58 
    59     inline iterator end() const {
    60         return mSparseCharSet.end();
    61     }
    62 
    63     inline interval_t front() const {
    64         return mSparseCharSet.front();
    65     }
    66 
    67     inline interval_t back() const {
    68         return mSparseCharSet.back();
    69     }
    70 
    71     inline size_type size() const {
    72         return mSparseCharSet.size();
    73     }
    74 
    75     inline bool empty() const {
    76         return mSparseCharSet.empty();
     42        return back().second;
    7743    }
    7844
     
    9258
    9359    inline CC()
    94     : RE(ClassTypeId::CC)
    95     , mSparseCharSet() {
     60    : RE(ClassTypeId::CC) {
    9661
    9762    }
     63
    9864    CC(const CC & cc);
     65
    9966    inline CC(const codepoint_t codepoint)
    10067    : RE(ClassTypeId::CC)
    101     , mSparseCharSet(codepoint) {
     68    , UCD::UnicodeSet(codepoint) {
    10269
    10370    }
     71
    10472    inline CC(const codepoint_t lo_codepoint, const codepoint_t hi_codepoint)
    10573    : RE(ClassTypeId::CC)
    106     , mSparseCharSet(lo_codepoint, hi_codepoint) {
     74    , UCD::UnicodeSet(lo_codepoint, hi_codepoint) {
    10775
    10876    }
     77
    10978    CC(const CC * cc1, const CC * cc2);
    11079
    11180    inline CC(UCD::UnicodeSet && set)
    11281    : RE(ClassTypeId::CC)
    113     , mSparseCharSet(std::move(set)) {
     82    , UCD::UnicodeSet(std::move(set)) {
    11483
    11584    }
     
    11786    template <typename itr>
    11887    CC * initialize(itr begin, itr end);
    119 private:   
    120     UCD::UnicodeSet mSparseCharSet;
     88
    12189};
    12290
     
    146114CC * CC::initialize(itr begin, itr end) {
    147115    for (auto i = begin; i != end; ++i) {
    148         mSparseCharSet.insert_range(i->first, i->second);
     116        insert_range(i->first, i->second);
    149117    }
    150118    return this;
     
    184152
    185153inline CC * makeCC(UCD::UnicodeSet && set) {
    186     return makeCC(std::move(set));
     154    return new CC(std::move(set));
    187155}
    188156
    189 CC * subtractCC(const CC * a, const CC * b);
    190    
    191 CC * intersectCC(const CC * cc1, const CC * cc2);
     157inline CC * subtractCC(const CC * a, const CC * b) {
     158    return makeCC(std::move(*a - *b));
     159}
     160
     161inline CC * intersectCC(const CC * a, const CC * b) {
     162    return makeCC(std::move(*a & *b));
     163}
    192164
    193165CC * caseInsensitize(const CC * cc);
Note: See TracChangeset for help on using the changeset viewer.