source: icGREP/icgrep-devel/icgrep/pablo/branch.h @ 5350

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

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

File size: 2.0 KB
Line 
1#ifndef BRANCH_H
2#define BRANCH_H
3
4#include <pablo/pabloAST.h>
5namespace pablo { class Var; }
6namespace pablo { class PabloBlock; }
7
8namespace pablo {
9
10class Branch : public Statement {
11    friend class PabloBlock;
12    friend class Statement;
13    friend class Simplifier;
14public:
15    using EscapedVars = std::vector<Var *>;
16    static inline bool classof(const PabloAST * e) {
17        switch (e->getClassTypeId()) {
18            case ClassTypeId::If:
19            case ClassTypeId::While:
20                return true;
21            default:
22                return false;
23        }
24    }
25    static inline bool classof(const void *) {
26        return false;
27    }
28    inline PabloAST * getCondition() const {
29        return getOperand(0);
30    }
31    inline void setCondition(PabloAST * const condition) {
32        return setOperand(0, condition);
33    }
34    inline PabloBlock * getBody() {
35        return mBody;
36    }
37    inline  PabloBlock * getBody() const {
38        return mBody;
39    }
40    PabloBlock * setBody(PabloBlock * const body);
41    EscapedVars getEscaped() const;
42protected:
43    Branch(const ClassTypeId typeId, PabloAST * condition, PabloBlock * body, Allocator & allocator);
44protected:
45    PabloBlock * mBody;
46};
47
48class If : public Branch {
49    friend class PabloBlock;
50    friend class Statement;
51    friend class Simplifier;
52public:
53    static inline bool classof(const PabloAST * e) {
54        return e->getClassTypeId() == ClassTypeId::If;
55    }
56protected:
57    If(PabloAST * condition, PabloBlock * body, Allocator & allocator)
58    : Branch(ClassTypeId::If, condition, body, allocator) {
59
60    }
61};
62
63class While : public Branch {
64    friend class PabloBlock;
65    friend class Statement;
66    friend class Simplifier;
67public:
68    static inline bool classof(const PabloAST * e) {
69        return e->getClassTypeId() == ClassTypeId::While;
70    }
71protected:
72    While(PabloAST * condition, PabloBlock * body, Allocator & allocator)
73    : Branch(ClassTypeId::While, condition, body, allocator) {
74
75    }
76};
77
78
79}
80
81#endif // BRANCH_H
Note: See TracBrowser for help on using the repository browser.