Ignore:
Timestamp:
Jun 29, 2015, 1:46:55 PM (4 years ago)
Author:
nmedfort
Message:

Preliminary changes to inclusion of UCD Compiler into the RE Compiler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/builder.hpp

    r4617 r4622  
    1010public:
    1111
    12     PabloBuilder(PabloBlock & pb) : mPb(pb) {}
     12    PabloBuilder(PabloBlock & block) : mPb(block), mParent(nullptr) {}
    1313
    14     inline static PabloBuilder Create(PabloBuilder & parent) {
    15         return PabloBuilder(parent.getPabloBlock().Create(parent.getPabloBlock()), parent);
     14    PabloBuilder(PabloBlock & block, PabloBuilder & parent) : mPb(block), mParent(&parent), mExprTable(&(parent.mExprTable)) {}
     15
     16    inline static PabloBuilder && Create(PabloBuilder & parent) {
     17        return std::move(PabloBuilder(parent.mPb.Create(parent.mPb), parent));
    1618    }
    1719
     
    5557    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount);
    5658
     59    inline PabloAST * createAdvance(PabloAST * expr, const Integer::integer_t shiftAmount, const std::string prefix) {
     60        if (shiftAmount == 0) {
     61            return expr;
     62        }
     63        return createAdvance(expr, mPb.getInteger(shiftAmount), prefix);
     64    }
     65
    5766    PabloAST * createAdvance(PabloAST * expr, PabloAST * shiftAmount, const std::string prefix);
    5867
    59     Next * createNext(Assign * assign, PabloAST * expr);
     68    inline Next * createNext(Assign * assign, PabloAST * expr) {
     69        return mPb.createNext(assign, expr);
     70    }
    6071
    6172    PabloAST * createAnd(PabloAST * expr1, PabloAST * expr2);
    6273
     74    PabloAST * createAnd(PabloAST * expr1, PabloAST * expr2, const std::string prefix);
     75
    6376    PabloAST * createNot(PabloAST * expr);
     77
     78    PabloAST * createNot(PabloAST * expr, const std::string prefix);
    6479
    6580    PabloAST * createOr(PabloAST * expr1, PabloAST * expr2);
    6681
     82    PabloAST * createOr(PabloAST * expr1, PabloAST * expr2, const std::string prefix);
     83
    6784    PabloAST * createXor(PabloAST * expr1, PabloAST * expr2);
     85
     86    PabloAST * createXor(PabloAST * expr1, PabloAST * expr2, const std::string prefix);
    6887
    6988    PabloAST * createMatchStar(PabloAST * marker, PabloAST * charclass);
    7089
     90    PabloAST * createMatchStar(PabloAST * marker, PabloAST * charclass, const std::string prefix);
     91
    7192    PabloAST * createScanThru(PabloAST * from, PabloAST * thru);
    7293
     94    PabloAST * createScanThru(PabloAST * from, PabloAST * thru, const std::string prefix);
     95
    7396    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr);
     97
     98    PabloAST * createSel(PabloAST * condition, PabloAST * trueExpr, PabloAST * falseExpr, const std::string prefix);
     99
     100    inline If * createIf(PabloAST * condition, std::initializer_list<Assign *> definedVars, PabloBuilder & body) {
     101        return mPb.createIf(condition, std::move(definedVars), body.mPb);
     102    }
    74103
    75104    inline If * createIf(PabloAST * condition, std::initializer_list<Assign *> definedVars, PabloBlock & body) {
     
    77106    }
    78107
     108    inline If * createIf(PabloAST * condition, std::vector<Assign *> definedVars, PabloBuilder & body) {
     109        return mPb.createIf(condition, std::move(definedVars), body.mPb);
     110    }
     111
    79112    inline If * createIf(PabloAST * condition, std::vector<Assign *> definedVars, PabloBlock & body) {
    80113        return mPb.createIf(condition, std::move(definedVars), body);
     114    }
     115
     116    inline While * createWhile(PabloAST * condition, PabloBuilder & body) {
     117        return mPb.createWhile(condition, body.mPb);
    81118    }
    82119
     
    109146    }
    110147
    111 protected:
    112 
    113     PabloBuilder(PabloBlock & pb, PabloBuilder & parent) : mPb(pb), mExprTable(&(parent.mExprTable)) {}
     148    inline PabloBuilder * getParent() {
     149        return mParent;
     150    }
    114151
    115152private:
    116153
    117154    PabloBlock &        mPb;
     155    PabloBuilder *      mParent;
    118156    ExpressionTable     mExprTable;
    119157};
Note: See TracChangeset for help on using the changeset viewer.