Ignore:
Timestamp:
Nov 18, 2016, 1:46:55 PM (2 years ago)
Author:
nmedfort
Message:

Merged PabloFunction? and PabloKernel? classes. Updated projects where necessary.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/pablo/prototype.h

    r5216 r5217  
    5050}
    5151
    52 class PabloFunction : public Prototype {
    53     friend class PabloBlock;
    54     friend class Branch;
    55     using Allocator = SlabAllocator<PabloAST *>;
    56 public:
    57 
    58     static inline bool classof(const PabloAST * e) {
    59         switch (e->getClassTypeId()) {
    60             case ClassTypeId::Function:
    61             case ClassTypeId::Prototype:
    62                 return true;
    63             default:
    64                 return false;
    65         }       
    66     }
    67 
    68     static inline bool classof(void *) {
    69         return false;
    70     }
    71 
    72     static PabloFunction * Create(std::string name);
    73    
    74     virtual bool operator==(const PabloAST & other) const {
    75         return &other == this;
    76     }
    77 
    78     PabloBlock * getEntryBlock() {
    79         return mEntryBlock;
    80     }
    81 
    82     const PabloBlock * getEntryBlock() const {
    83         return mEntryBlock;
    84     }
    85 
    86     PabloBlock * setEntryBlock(PabloBlock * entryBlock) {
    87         assert (entryBlock);
    88         std::swap(mEntryBlock, entryBlock);
    89         return entryBlock;
    90     }
    91 
    92     Var * getParameter(const unsigned index) {
    93         return static_cast<Var *>(mParameters[index]);
    94     }
    95 
    96     const Var * getParameter(const unsigned index) const {
    97         return static_cast<Var *>(mParameters[index]);
    98     }
    99 
    100     Var * addParameter(const std::string name, Type * const type);
    101 
    102     Var * getResult(const unsigned index) {
    103         return static_cast<Var *>(mResults[index]);
    104     }
    105 
    106     const Var * getResult(const unsigned index) const {
    107         return static_cast<Var *>(mResults[index]);
    108     }
    109 
    110     Var * addResult(const std::string name, Type * const type);
    111 
    112     Var * makeVariable(PabloAST * name, Type * const type);
    113 
    114     Var * getVariable(const unsigned index) {
    115         return static_cast<Var *>(mVariables[index]);
    116     }
    117 
    118     unsigned getNumOfVariables() {
    119         return mVariables.size();
    120     }
    121 
    122     Zeroes * getNullValue(Type * const type);
    123 
    124     Ones * getAllOnesValue(Type * const type);
    125 
    126     void operator delete (void*);
    127 
    128     virtual ~PabloFunction() { }
    129 
    130     inline SymbolGenerator * getSymbolTable() const {
    131         return mSymbolTable;
    132     }
    133 
    134 protected:
    135 
    136     __attribute__((noreturn)) void throwInvalidParameterIndex(const unsigned index) const;
    137 
    138     __attribute__((noreturn)) void throwInvalidResultIndex(const unsigned index) const;
    139 
    140     PabloFunction(std::string && name);
    141 private:
    142     SymbolGenerator *                           mSymbolTable;
    143     PabloBlock *                                mEntryBlock;
    144     std::vector<PabloAST *, Allocator>          mParameters;
    145     std::vector<PabloAST *, Allocator>          mResults;
    146     std::vector<PabloAST *, Allocator>          mConstants;
    147     std::vector<PabloAST *, Allocator>          mVariables;
    148 };
    149 
    150 inline PabloFunction * PabloFunction::Create(std::string name) {
    151     return new PabloFunction(std::move(name));
    152 }
    153    
    15452}
    15553
Note: See TracChangeset for help on using the changeset viewer.