Ignore:
Timestamp:
Oct 5, 2014, 1:42:07 PM (5 years ago)
Author:
nmedfort
Message:

Created internal 'string pool' for Call, CharClass?, Var and Assign pablo classes.

File:
1 edited

Legend:

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

    r4211 r4213  
    99
    1010#include <pablo/pe_pabloe.h>
     11#include <pablo/pe_string.h>
    1112#include <pablo/pe_advance.h>
    1213#include <pablo/pe_all.h>
     
    5455        return mAll[value];
    5556    }
     57
     58    Call * createCall(const std::string name);
     59
     60    Var * createVar(const Assign * assign);
     61
     62    Var * createVar(const std::string name);
     63
     64    inline PabloE * createVarIfAssign(PabloE * const input) {
     65        return isa<Assign>(input) ? createVar(cast<const Assign>(input)) : input;
     66    }
     67
     68    CharClass * createCharClass(const std::string name);
     69    Assign * createAssign(const std::string name, PabloE * expr);
    5670
    5771//    PabloE * createAdvance(PabloE * expr);
     
    124138//    };
    125139
     140//    template<typename... Args>
     141//    struct ExpressionMap {
     142//        typedef std::tuple<PabloE::ClassTypeId, Args...> Key;
     143
     144//        inline PabloE * find(const PabloE::ClassTypeId type, Args... args) {
     145//            auto key = std::make_tuple(type, args...);
     146//            auto itr = _map.find(key);
     147//            if (itr == _map.end()) {
     148//                _map.insert(std::make_pair(std::move(key), inst));
     149//                return nullptr;
     150//            }
     151//            return itr->second;
     152//        }
     153
     154//        inline PabloE * find(const PabloE::ClassTypeId type, Args... args) {
     155//            auto key = std::make_tuple(type, args...);
     156//            auto itr = _map.find(key);
     157//            if (itr == _map.end()) {
     158//                _map.insert(std::make_pair(std::move(key), inst));
     159//                return nullptr;
     160//            }
     161//            return itr->second;
     162//        }
     163
     164//    private:
     165//        std::unordered_map<Key, PabloE *> _map;
     166//    };
     167
     168
    126169
    127170    inline void push_back(PabloE * expr) {
     
    137180    }
    138181
     182protected:
     183
     184    String * getString(const std::string string);
     185
    139186private:   
    140     SymbolGenerator &               mSymbolGenerator;
    141     CodeGenState * const            mPredecessor;
    142     const std::array<All *, 2>      mAll;
     187    SymbolGenerator &                           mSymbolGenerator;
     188    CodeGenState * const                        mPredecessor;
     189    const std::array<All *, 2>                  mAll;
     190    std::unordered_map<std::string, String *>   mStringMap;
    143191
    144192
    145 
    146     std::list<PabloE *>             mExpressions;
     193    std::list<PabloE *>                         mExpressions;
    147194};
    148195
Note: See TracChangeset for help on using the changeset viewer.