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

Last change on this file since 5620 was 5620, checked in by nmedfort, 19 months ago

Bug fixes for multigrep mode. Optional PabloKernel? branch hit counter added. Minor optimizations.

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 <kernels/interface.h>
14#include <string>
15
16namespace cc {
17
18class CC_NameMap;
19
20class CC_Compiler{
21    friend class ParabixCharacterClassKernelBuilder;
22public:
23
24    using Vars = std::vector<pablo::Var *>;
25
26    CC_Compiler(pablo::PabloKernel * kernel, pablo::Var * basisBitSet);
27   
28    pablo::PabloAST * compileCC(const re::CC *cc);
29
30    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBlock & block);
31
32    pablo::PabloAST * compileCC(const re::CC *cc, pablo::PabloBuilder & builder);
33
34    pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBlock & block);
35
36    pablo::PabloAST * compileCC(const std::string & canonicalName, const re::CC *cc, pablo::PabloBuilder & builder);
37
38    pablo::PabloBuilder & getBuilder();
39
40    const std::vector<pablo::PabloAST *> & getBasisBits() const {
41        return mBasisBit;
42    }
43
44    bool isUTF_16() const {
45        return mEncodingBits == 16;
46    }
47
48private:
49    pablo::PabloAST * getBasisVar(const unsigned n) const;
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);
64private:   
65    pablo::PabloBuilder             mBuilder;
66    const unsigned                  mEncodingBits;
67    std::vector<pablo::PabloAST *>  mBasisBit;
68    unsigned                        mEncodingMask;
69};
70
71inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc) {
72    return compileCC(cc, mBuilder);
73}
74
75inline pablo::PabloAST * CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBlock & block) {
76    return compileCC(cc->canonicalName(re::ByteClass), cc, block);
77}
78
79inline pablo::PabloAST *CC_Compiler::compileCC(const re::CC *cc, pablo::PabloBuilder & builder) {
80    return compileCC(cc->canonicalName(re::ByteClass), cc, builder);
81}
82
83inline pablo::PabloBuilder & CC_Compiler::getBuilder() {
84    return mBuilder;
85}
86
87}
88
89#endif // CC_COMPILER_H
90
91
Note: See TracBrowser for help on using the repository browser.