Changeset 4285 for icGREP


Ignore:
Timestamp:
Nov 1, 2014, 6:01:18 PM (5 years ago)
Author:
nmedfort
Message:

Start of multiplexing work; does not affect program yet.

Location:
icGREP/icgrep-devel/icgrep
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/cc/cc_compiler.cpp

    r4284 r4285  
    1010//Pablo Expressions
    1111#include <pablo/codegenstate.h>
     12#include <pablo/pe_metadata.h>
    1213#include <re/re_alt.h>
    1314#include <re/re_cc.h>
  • icGREP/icgrep-devel/icgrep/pablo/pe_metadata.h

    r4284 r4285  
    88
    99class PMDNode {
     10public:
    1011    enum class ClassTypeId : unsigned {
    1112        PMDASTVector
     
    2829
    2930class PMDVector : public PMDNode, public std::vector<PabloAST*> {
     31public:
     32    PMDVector * get(std::vector<PabloAST*> && vec) {
     33        return new PMDVector(std::move(vec));
     34    }
    3035protected:
    3136    PMDVector(std::vector<PabloAST*> && vec)
     
    3641};
    3742
    38 PMDVector * makeMetadataVector(std::vector<PabloAST*> && vec) {
    39     return new PMDVector(vec);
    40 }
    41 
    42 
    4343}
    4444
  • icGREP/icgrep-devel/icgrep/re/re_cc.cpp

    r4255 r4285  
    8383}
    8484
     85CC::Relationship CC::compare(const CC * a, const CC * b) {
     86
     87    auto ai = a->cbegin();
     88    const auto ai_end = a->cend();
     89    auto bi = b->cbegin();
     90    const auto bi_end = b->cend();
     91
     92    bool A_cannot_be_a_subset_of_B = false;
     93    bool B_cannot_be_a_subset_of_A = false;
     94    bool disjoint = true;
     95
     96
     97    while (ai != ai_end && bi != bi_end) {
     98        const CharSetItem & ra = *ai;
     99        const CharSetItem & rb = *bi;
     100
     101        if (ra.hi_codepoint < rb.lo_codepoint) {
     102            ++ai;
     103            B_cannot_be_a_subset_of_A = true;
     104            continue;
     105        }
     106        if (rb.hi_codepoint < ra.lo_codepoint) {
     107            ++bi;
     108            A_cannot_be_a_subset_of_B = true;
     109            continue;
     110        }
     111
     112        disjoint = false;
     113
     114        if (ra.lo_codepoint < rb.lo_codepoint) {
     115            A_cannot_be_a_subset_of_B = true;
     116        }
     117
     118        if (rb.lo_codepoint < ra.lo_codepoint) {
     119            B_cannot_be_a_subset_of_A = true;
     120        }
     121
     122        if (ra.hi_codepoint <= rb.hi_codepoint) {
     123            ++ai;
     124        }
     125        if (rb.hi_codepoint <= ra.hi_codepoint) {
     126            ++bi;
     127        }
     128
     129    }
     130    if (disjoint) {
     131        return Relationship::DISJOINT;
     132    }
     133
     134    if (ai == ai_end && bi != bi_end) {
     135        B_cannot_be_a_subset_of_A = true;
     136    }
     137    if (bi == bi_end && ai != ai_end) {
     138        A_cannot_be_a_subset_of_B = true;
     139    }
     140
     141    if (A_cannot_be_a_subset_of_B && B_cannot_be_a_subset_of_A) {
     142        return Relationship::OVERLAPPING;
     143    }
     144    else if (A_cannot_be_a_subset_of_B) {
     145        return Relationship::B_SUBSET_A;
     146    }
     147    else {
     148        return Relationship::A_SUBSET_B;
     149    }
    85150}
     151
     152}
  • icGREP/icgrep-devel/icgrep/re/re_cc.h

    r4272 r4285  
    3535        return false;
    3636    }
     37
     38    enum class Relationship {
     39        A_SUBSET_B
     40        , B_SUBSET_A
     41        , DISJOINT
     42        , OVERLAPPING
     43    };
     44
     45    static Relationship compare(const CC * a, const CC * b);
    3746
    3847    typedef CharSetVector::iterator                 iterator;
Note: See TracChangeset for help on using the changeset viewer.