source: icGREP/icgrep-devel/icgrep/cc/cc_namemap.hpp @ 4612

Last change on this file since 4612 was 4603, checked in by nmedfort, 4 years ago

Temporary check-in

File size: 1.2 KB
Line 
1#ifndef CC_NAMER_HPP
2#define CC_NAMER_HPP
3
4#include <unordered_map>
5#include <vector>
6#include <string>
7#include "re/re_name.h"
8#include "re/re_cc.h"
9
10namespace re {
11    class CC;
12    class RE;
13}
14
15namespace cc {
16
17class CC_NameMap {
18public:
19
20    typedef std::unordered_map<std::string, re::Name*>          NameMap;
21    typedef std::vector<re::Name*>                              NameVector;
22    typedef NameVector::const_iterator                          iterator;
23
24    CC_NameMap() {}
25
26    re::RE * process(re::RE * re, const re::CC_type t);
27
28    inline const re::Name * operator[](const std::string & name) const {
29        auto f = mNameMap.find(name);
30        if (f == mNameMap.end()) {
31            return nullptr;
32        }
33        return f->second;
34    }
35
36    inline iterator begin() const {
37        return mNameVector.begin();
38    }
39
40    inline iterator end() const {
41        return mNameVector.end();
42    }
43
44    std::string printMap();
45   
46private:
47
48    inline re::Name * insert(std::string && name, re::Name * re) {
49        mNameMap.insert(std::make_pair(std::move(name), re));
50        mNameVector.push_back(re);
51        return re;
52    }
53
54private:
55    NameMap                 mNameMap;
56    NameVector              mNameVector;
57};
58
59}
60
61#endif // CC_NAMER_HPP
Note: See TracBrowser for help on using the repository browser.