source: icGREP/icgrep-devel/icgrep/pablo/ps_if.h @ 4388

Last change on this file since 4388 was 4345, checked in by cameron, 5 years ago

Correct missing import

File size: 2.1 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 PS_IF_H
8#define PS_IF_H
9
10#include <pablo/pabloAST.h>
11#include <vector>
12
13namespace pablo {
14
15class If : public Statement {
16    friend class PabloBlock;
17public:
18    static inline bool classof(const PabloAST * e) {
19        return e->getClassTypeId() == ClassTypeId::If;
20    }
21    static inline bool classof(const void *) {
22        return false;
23    }
24    virtual ~If() {
25    }
26    virtual PabloAST * getOperand(const unsigned index) const {
27        assert (index == 0);
28        return mExpr;
29    }
30    virtual unsigned getNumOperands() const {
31        return 1;
32    }
33    virtual void setOperand(const unsigned index, PabloAST * value) {
34        assert (index == 0);
35        mExpr = value;
36    }
37    inline PabloAST * getCondition() const {
38        return mExpr;
39    }
40    inline StatementList & getBody() {
41        return mBody;
42    }
43    inline const StatementList & getBody() const {
44        return mBody;
45    }
46    inline const std::vector<Assign *> & getDefined() const {
47        return mDefined;
48    }
49    inline void setInclusiveCarryCount(const unsigned count) {
50        mCarryCount = count;
51    }
52    inline unsigned getInclusiveCarryCount() const {
53        return mCarryCount;
54    }
55    inline void setInclusiveAdvanceCount(const unsigned count) {
56        mAdvanceCount = count;
57    }
58    inline unsigned getInclusiveAdvanceCount() const {
59        return mAdvanceCount;
60    }
61protected:
62    If(PabloAST * expr, std::vector<Assign *> && definedVars, StatementList && body, StatementList * parent)
63    : Statement(ClassTypeId::If, parent)
64    , mExpr(expr)
65    , mBody(std::move(body))
66    , mDefined(std::move(definedVars))
67    , mCarryCount(0)
68    , mAdvanceCount(0)
69    {
70        for (Statement * s : mBody) {
71            s->mParent = &mBody;
72        }
73    }
74private:
75    PabloAST *          mExpr;
76    StatementList       mBody;
77    std::vector<Assign *>    mDefined;
78    unsigned            mCarryCount;
79    unsigned            mAdvanceCount;
80};
81
82}
83
84#endif // PS_IF_H
85
86
Note: See TracBrowser for help on using the repository browser.