source: icGREP/icgrep-devel/icgrep-1.00/pablo/symbol_generator.cpp @ 4529

Last change on this file since 4529 was 4510, checked in by nmedfort, 5 years ago

Many memory deallocation fixes.

File size: 1.5 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#include <pablo/symbol_generator.h>
8#include <pablo/pe_string.h>
9#include <pablo/pe_integer.h>
10
11namespace pablo {
12
13SymbolGenerator::SymbolGenerator()
14: mPrefixMap()
15{
16
17}
18
19String * SymbolGenerator::get(const std::string name, const bool generated) {
20    auto f = mStringMap.find(name);
21    String * result;
22    if (f == mStringMap.end()) {
23        result = new String(name, generated);
24        mStringMap.insert(std::make_pair(std::move(name), result));
25    }
26    else {
27        result = f->second;
28    }
29    return result;
30}
31
32Integer * SymbolGenerator::getInteger(const integer_t value) {
33    auto f = mIntegerMap.find(value);
34    Integer * result;
35    if (f == mIntegerMap.end()) {
36        result = new Integer(value);
37        assert (result->value() == value);
38        mIntegerMap.insert(std::make_pair(value, result));
39    }
40    else {
41        result = f->second;
42    }
43    return result;
44}
45
46String * SymbolGenerator::make(const std::string prefix, const bool generated) {
47    auto f = mPrefixMap.find(prefix);
48    unsigned count = 0;
49    if (f == mPrefixMap.end()) {
50        mPrefixMap.insert(std::make_pair(prefix, 1));
51        return get(prefix, generated);
52    }
53    else {
54        count = f->second++;
55        return get(prefix + std::to_string(count), generated);
56    }
57}
58
59SymbolGenerator::~SymbolGenerator() {
60
61}
62
63}
Note: See TracBrowser for help on using the repository browser.