source: icGREP/icgrep-devel/icgrep/re/re_memoizer.hpp @ 5418

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

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

File size: 986 bytes
RevLine 
[4818]1#ifndef RE_NAMEDICTIONARY_H
2#define RE_NAMEDICTIONARY_H
3
[4819]4#include <re/re_name.h>
5#include <set>
6
[4818]7namespace re {
8
[4819]9struct MemoizerComparator {
10    inline bool operator() (const RE * lh, const RE * rh) const{
[5267]11        if (LLVM_LIKELY(llvm::isa<Name>(lh) && llvm::isa<Name>(rh))) {
12            return *llvm::cast<Name>(lh) < *llvm::cast<Name>(rh);
13        } else if (llvm::isa<Name>(lh)) {
14            return *llvm::cast<Name>(lh) < *llvm::cast<CC>(rh);
[4819]15        }
[5267]16        return *llvm::cast<Name>(rh) > *llvm::cast<CC>(lh);
[4819]17    }
[4818]18};
19
[4820]20struct Memoizer : public std::set<RE *, MemoizerComparator> {
[4819]21
22    inline Name * memoize(CC * cc) {
23        auto f = find(cc);
24        if (f != end()) {
[5267]25            return llvm::cast<Name>(*f);
[4819]26        } else {
[4823]27            Name * name = makeName(cc);
[4819]28            insert(name);
29            return name;
30        }
31    }
32
33    inline Name * memoize(Name * name) {
[5267]34        return llvm::cast<Name>(*insert(name).first);
[4819]35    }
36};
37
38}
39
[4818]40#endif // RE_NAMEDICTIONARY_H
Note: See TracBrowser for help on using the repository browser.