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

Last change on this file since 5267 was 5267, checked in by nmedfort, 2 years ago

Code clean-up. Removed Pablo Call, SetIthBit? and Prototype.

File size: 3.0 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 <string>
14
15namespace cc {
16
17class CC_NameMap;
18
19class CC_Compiler{
20    friend class ParabixCharacterClassKernelBuilder;
21public:
22
23    using Vars = std::vector<pablo::Var *>;
24
25    CC_Compiler(pablo::PabloKernel * kernel, const unsigned encodingBits = 8, const std::string prefix = "basis");
26
27    pablo::PabloAST * compileCC(const re::CC *cc);
28
29    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block);
30
31    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
32
33    pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block);
34
35    pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
36
37    pablo::PabloBuilder & getBuilder();
38
39    const std::vector<pablo::PabloAST *> & getBasisBits() {
40        return mBasisBit;
41    }
42
43    bool isUTF_16() const {
44        return mEncodingBits == 16;
45    }
46
47private:
48    pablo::PabloAST * getBasisVar(const unsigned n) const;
49    template<typename PabloBlockOrBuilder>
50    pablo::PabloAST * bit_pattern_expr(const unsigned pattern, unsigned selected_bits, PabloBlockOrBuilder & pb);
51    template<typename PabloBlockOrBuilder>
52    pablo::PabloAST * char_test_expr(const re::codepoint_t ch, PabloBlockOrBuilder & pb);
53    template<typename PabloBlockOrBuilder>
54    pablo::PabloAST * make_range(const re::codepoint_t n1, const re::codepoint_t n2, PabloBlockOrBuilder & pb);
55    template<typename PabloBlockOrBuilder>
56    pablo::PabloAST * GE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
57    template<typename PabloBlockOrBuilder>
58    pablo::PabloAST * LE_Range(const unsigned N, const unsigned n, PabloBlockOrBuilder & pb);
59    template<typename PabloBlockOrBuilder>
60    pablo::PabloAST * char_or_range_expr(const re::codepoint_t lo, const re::codepoint_t hi, PabloBlockOrBuilder & pb);
61    template<typename PabloBlockOrBuilder>
62    pablo::PabloAST * charset_expr(const re::CC *cc, PabloBlockOrBuilder & pb);
63private:   
64    pablo::PabloBuilder             mBuilder;
65    std::vector<pablo::PabloAST *>  mBasisBit;
66    const unsigned                  mEncodingBits;
67    unsigned                        mEncodingMask;
68};
69
70inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc) {
71    return compileCC(cc, mBuilder);
72}
73
74inline pablo::PabloAST * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
75    return compileCC(cc->canonicalName(re::ByteClass), cc, block);
76}
77
78inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
79    return compileCC(cc->canonicalName(re::ByteClass), cc, builder);
80}
81
82inline pablo::PabloBuilder & CC_Compiler::getBuilder() {
83    return mBuilder;
84}
85
86}
87
88#endif // CC_COMPILER_H
89
90
Note: See TracBrowser for help on using the repository browser.