Ignore:
Timestamp:
Jan 29, 2018, 1:08:42 PM (16 months ago)
Author:
cameron
Message:

Unify Parabix CC compiler and Direct CC compiler with a common superclass

File:
1 edited

Legend:

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

    r5843 r5847  
    1616namespace cc {
    1717
    18 class CC_Compiler{
    19     friend class ParabixCharacterClassKernelBuilder;
     18class CC_Compiler {
    2019public:
    2120   
    22     CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet);
     21    virtual pablo::PabloAST * compileCC(const re::CC *cc) = 0;
    2322   
    24     pablo::PabloAST * compileCC(const re::CC *cc);
     23    virtual pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block) = 0;
     24   
     25    virtual pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder) = 0;
     26   
     27    virtual pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block) = 0;
     28   
     29    virtual pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder) = 0;
    2530
    26     pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block);
     31protected:
     32    CC_Compiler(pablo::PabloKernel * kernel);
     33    pablo::PabloBuilder             mBuilder;
     34};
     35   
     36   
     37class Parabix_CC_Compiler : public CC_Compiler {
     38public:
     39   
     40    Parabix_CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet);
     41   
     42    pablo::PabloAST * compileCC(const re::CC *cc) override;
     43   
     44    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block) override;
     45   
     46    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder) override;
     47   
     48    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBlock & block) override;
    2749
    28     pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
    29 
    30     pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block);
    31 
    32     pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
     50    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBuilder & builder) override;
    3351
    3452private:
     
    4967    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
    5068private:   
    51     pablo::PabloBuilder             mBuilder;
    5269    const unsigned                  mEncodingBits;
    5370    std::vector<pablo::PabloAST *>  mBasisBit;
     
    5572};
    5673
    57 inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc) {
     74    inline pablo::PabloAST * Parabix_CC_Compiler::compileCC(const re::CC *cc) {
     75        return compileCC(cc, mBuilder);
     76    }
     77   
     78    inline pablo::PabloAST * Parabix_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
     79        return compileCC(cc->canonicalName(), cc, block);
     80    }
     81   
     82    inline pablo::PabloAST * Parabix_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
     83        return compileCC(cc->canonicalName(), cc, builder);
     84    }
     85   
     86   
     87
     88class Direct_CC_Compiler : public CC_Compiler {
     89public:
     90   
     91    Direct_CC_Compiler(pablo::PabloKernel * kernel, pablo::PabloAST * codeUnitStream);
     92   
     93    pablo::PabloAST * compileCC(const re::CC *cc) override;
     94   
     95    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block) override;
     96   
     97    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder) override;
     98   
     99    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBlock & block) override;
     100   
     101    pablo::PabloAST * compileCC(const std::string & name, const re::CC *cc, pablo::PabloBuilder & builder) override;
     102       
     103private:
     104    pablo::PabloAST *               mCodeUnitStream;
     105};
     106
     107   
     108inline pablo::PabloAST * Direct_CC_Compiler::compileCC(const re::CC *cc) {
    58109    return compileCC(cc, mBuilder);
    59110}
    60111
    61 inline pablo::PabloAST * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
    62     return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, block);
     112inline pablo::PabloAST * Direct_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
     113    return compileCC(cc->canonicalName(), cc, block);
    63114}
    64115
    65 inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
    66     return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, builder);
     116inline pablo::PabloAST * Direct_CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
     117    return compileCC(cc->canonicalName(), cc, builder);
    67118}
     119
     120
    68121
    69122pablo::PabloAST * compileCCfromCodeUnitStream(const re::CC *cc, pablo::PabloAST * codeUnitStream, pablo::PabloBuilder & pb);
Note: See TracChangeset for help on using the changeset viewer.