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

Last change on this file since 5843 was 5843, checked in by cameron, 15 months ago

CC Compiler refactoring step

File size: 2.8 KB
Line 
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
10
11#include <re/re_cc.h>
12#include <pablo/builder.hpp>
13#include <kernels/interface.h>
14#include <string>
15
16namespace cc {
17
18class CC_Compiler{
19    friend class ParabixCharacterClassKernelBuilder;
20public:
21   
22    CC_Compiler(pablo::PabloKernel * kernel, std::vector<pablo::PabloAST *> basisBitSet);
23   
24    pablo::PabloAST * compileCC(const re::CC *cc);
25
26    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block);
27
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);
33
34private:
35    pablo::PabloAST * getBasisVar(const unsigned n) const;
36    template<typename PabloBlockOrBuilder>
37    pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb);
38    template<typename PabloBlockOrBuilder>
39    pablo::PabloAST * char_test_expr(const re::codepoint_t ch, PabloBlockOrBuilder & pb);
40    template<typename PabloBlockOrBuilder>
41    pablo::PabloAST * make_range(const re::codepoint_t n1, const re::codepoint_t n2, PabloBlockOrBuilder & pb);
42    template<typename PabloBlockOrBuilder>
43    pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
44    template<typename PabloBlockOrBuilder>
45    pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
46    template<typename PabloBlockOrBuilder>
47    pablo::PabloAST * char_or_range_expr(const re::codepoint_t lo, const re::codepoint_t hi, PabloBlockOrBuilder & pb);
48    template<typename PabloBlockOrBuilder>
49    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
50private:   
51    pablo::PabloBuilder             mBuilder;
52    const unsigned                  mEncodingBits;
53    std::vector<pablo::PabloAST *>  mBasisBit;
54    unsigned                        mEncodingMask;
55};
56
57inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc) {
58    return compileCC(cc, mBuilder);
59}
60
61inline pablo::PabloAST * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
62    return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, block);
63}
64
65inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
66    return compileCC(cc->canonicalName(re::CC_type::ByteClass), cc, builder);
67}
68
69pablo::PabloAST * compileCCfromCodeUnitStream(const re::CC *cc, pablo::PabloAST * codeUnitStream, pablo::PabloBuilder & pb);
70   
71}
72
73#endif // CC_COMPILER_H
74
75
Note: See TracBrowser for help on using the repository browser.