source: icGREP/icgrep-devel/icgrep/cc/cc_compiler.h @ 5823

Last change on this file since 5823 was 5823, checked in by cameron, 9 months ago

Direct CC compiler

File size: 3.1 KB
RevLine 
[3850]1/*
2 *  Copyright (c) 2014 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 *  icgrep is a trademark of International Characters.
5 */
6
7#ifndef CC_COMPILER_H
8#define CC_COMPILER_H
9
[5140]10
[4602]11#include <re/re_cc.h>
[4612]12#include <pablo/builder.hpp>
[5299]13#include <kernels/interface.h>
[4215]14#include <string>
[3850]15
[4198]16namespace cc {
17
[4249]18class CC_NameMap;
19
[4187]20class CC_Compiler{
[5217]21    friend class ParabixCharacterClassKernelBuilder;
[3850]22public:
[4209]23
[4612]24    using Vars = std::vector<pablo::Var *>;
[4210]25
[5299]26    CC_Compiler(pablo::PabloKernel * kernel, pablo::Var * basisBitSet);
27   
[5202]28    pablo::PabloAST * compileCC(const re::CC *cc);
[4612]29
[5217]30    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block);
[4357]31
[5202]32    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
[4602]33
[5202]34    pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block);
[4249]35
[5202]36    pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
[4612]37
[4622]38    pablo::PabloBuilder & getBuilder();
39
[5620]40    const std::vector<pablo::PabloAST *> & getBasisBits() const {
[4681]41        return mBasisBit;
42    }
43
[5202]44    bool isUTF_16() const {
45        return mEncodingBits == 16;
[5046]46    }
[5045]47
[4337]48private:
[5202]49    pablo::PabloAST * getBasisVar(const unsigned n) const;
[4612]50    template<typename PabloBlockOrBuilder>
51    pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb);
52    template<typename PabloBlockOrBuilder>
53    pablo::PabloAST * char_test_expr(const re::codepoint_t ch, PabloBlockOrBuilder & pb);
54    template<typename PabloBlockOrBuilder>
55    pablo::PabloAST * make_range(const re::codepoint_t n1, const re::codepoint_t n2, PabloBlockOrBuilder & pb);
56    template<typename PabloBlockOrBuilder>
57    pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
58    template<typename PabloBlockOrBuilder>
59    pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
60    template<typename PabloBlockOrBuilder>
61    pablo::PabloAST * char_or_range_expr(const re::codepoint_t lo, const re::codepoint_t hi, PabloBlockOrBuilder & pb);
62    template<typename PabloBlockOrBuilder>
63    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
[4602]64private:   
[5202]65    pablo::PabloBuilder             mBuilder;
[5299]66    const unsigned                  mEncodingBits;
[5202]67    std::vector<pablo::PabloAST *>  mBasisBit;
68    unsigned                        mEncodingMask;
[3850]69};
70
[5202]71inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc) {
[4612]72    return compileCC(cc, mBuilder);
[4198]73}
74
[5202]75inline pablo::PabloAST * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
[5781]76    return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, block);
[4612]77}
78
[5202]79inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
[5781]80    return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, builder);
[4612]81}
82
[4622]83inline pablo::PabloBuilder & CC_Compiler::getBuilder() {
84    return mBuilder;
85}
[4612]86
[5823]87pablo::PabloAST * compileCCfromCodeUnitStream(const re::CC *cc, pablo::PabloAST * codeUnitStream, pablo::PabloBuilder & pb);
88   
[4612]89}
90
[3850]91#endif // CC_COMPILER_H
92
93
Note: See TracBrowser for help on using the repository browser.