Ignore:
Timestamp:
Jun 21, 2015, 4:38:51 PM (4 years ago)
Author:
nmedfort
Message:

Multiplexing bug fix and some CC changes.

File:
1 edited

Legend:

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

    r4602 r4612  
    99
    1010#include <re/re_cc.h>
     11#include <pablo/builder.hpp>
    1112#include "utf_encoding.h"
    1213#include <string>
    13 
    14 namespace pablo {
    15     class PabloAST;
    16     class PabloBuilder;
    17     class PabloBlock;
    18     class Var;
    19     class Assign;
    20 }
    2114
    2215namespace cc {
     
    2720public:
    2821
    29     CC_Compiler(pablo::PabloBlock & cg, const Encoding encoding, const std::string basis_pattern = "basis");
     22    using Vars = std::vector<pablo::Var *>;
    3023
    31     std::vector<pablo::Var *> getBasisBits(const CC_NameMap & nameMap);
     24    CC_Compiler(pablo::PabloBlock & entry, const Encoding encoding, const std::string basis_pattern = "basis");
     25
     26    const Vars & getBasisBits(const CC_NameMap & nameMap) const;
     27
     28    pablo::Assign * compileCC(const re::CC *cc);
    3229
    3330    pablo::Assign * compileCC(const re::CC *cc, pablo::PabloBlock & block);
    3431
    35     pablo::Assign * compileCC(const re::CC *cc, pablo::PabloBuilder & pb);
     32    pablo::Assign * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
    3633
    37     pablo::Assign * compileCC(const re::CC *cc);
     34    pablo::Assign * compileCC(const std::string && canonicalName, const re::CC *cc, pablo::PabloBlock & block);
     35
     36    pablo::Assign * compileCC(const std::string &&canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
    3837
    3938    void compileByteClasses(re::RE * re);
     
    4140private:
    4241    pablo::Var * getBasisVar(const int n) const;
    43     pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, pablo::PabloBuilder & pb);
    44     pablo::PabloAST * char_test_expr(const re::CodePointType ch, pablo::PabloBuilder & pb);
    45     pablo::PabloAST * make_range(const re::CodePointType n1, const re::CodePointType n2, pablo::PabloBuilder & pb);
    46     pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, pablo::PabloBuilder & pb);
    47     pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, pablo::PabloBuilder & pb);
    48     pablo::PabloAST * char_or_range_expr(const re::CodePointType lo, const re::CodePointType hi, pablo::PabloBuilder & pb);
    49     pablo::PabloAST * charset_expr(const re::CC *cc, pablo::PabloBuilder & pb);
     42    template<typename PabloBlockOrBuilder>
     43    pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb);
     44    template<typename PabloBlockOrBuilder>
     45    pablo::PabloAST * char_test_expr(const re::codepoint_t ch, PabloBlockOrBuilder & pb);
     46    template<typename PabloBlockOrBuilder>
     47    pablo::PabloAST * make_range(const re::codepoint_t n1, const re::codepoint_t n2, PabloBlockOrBuilder & pb);
     48    template<typename PabloBlockOrBuilder>
     49    pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
     50    template<typename PabloBlockOrBuilder>
     51    pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
     52    template<typename PabloBlockOrBuilder>
     53    pablo::PabloAST * char_or_range_expr(const re::codepoint_t lo, const re::codepoint_t hi, PabloBlockOrBuilder & pb);
     54    template<typename PabloBlockOrBuilder>
     55    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
    5056private:   
    51     pablo::PabloBlock &         mCG;
     57    pablo::PabloBuilder         mBuilder;
    5258    std::vector<pablo::Var *>   mBasisBit;
    5359    const Encoding              mEncoding;
    5460};
     61
     62inline pablo::Assign * CC_Compiler::compileCC(const re::CC *cc) {
     63    return compileCC(cc, mBuilder);
     64}
     65
     66inline pablo::Assign * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
     67    return compileCC(std::move(cc->canonicalName(re::ByteClass)), cc, block);
     68}
     69
     70inline pablo::Assign * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
     71    return compileCC(std::move(cc->canonicalName(re::ByteClass)), cc, builder);
     72}
     73
     74inline const CC_Compiler::Vars & CC_Compiler::getBasisBits(const CC_NameMap &) const {
     75    return mBasisBit;
     76}
     77
    5578
    5679}
Note: See TracChangeset for help on using the changeset viewer.