cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
symbol_table_builder.h
Go to the documentation of this file.
1
2
3
// \file Contains a symbol table wrapper that keeps track of suffixes
4
// that have been used for their prefix
5
6
#ifndef CPROVER_UTIL_SYMBOL_TABLE_BUILDER_H
7
#define CPROVER_UTIL_SYMBOL_TABLE_BUILDER_H
8
9
#include "
symbol_table_base.h
"
10
13
class
symbol_table_buildert
:
public
symbol_table_baset
14
{
15
private
:
16
symbol_table_baset
&
base_symbol_table
;
17
mutable
std::map<std::string, std::size_t>
next_free_suffix_for_prefix
;
18
19
public
:
20
explicit
symbol_table_buildert
(
symbol_table_baset
&
base_symbol_table
)
21
:
symbol_table_baset
(
22
base_symbol_table
.
symbols
,
23
base_symbol_table
.
symbol_base_map
,
24
base_symbol_table
.
symbol_module_map
),
25
base_symbol_table
(
base_symbol_table
)
26
{
27
}
28
29
symbol_table_buildert
(
symbol_table_buildert
&&other)
30
:
symbol_table_baset
(
31
other.
symbols
,
32
other.
symbol_base_map
,
33
other.
symbol_module_map
),
34
base_symbol_table
(other.
base_symbol_table
)
35
{
36
}
37
38
symbol_table_buildert
(
const
symbol_table_buildert
&) =
delete
;
39
symbol_table_buildert
&
operator=
(
const
symbol_table_buildert
&) =
delete
;
40
symbol_table_buildert
&
operator=
(
symbol_table_buildert
&&) =
delete
;
41
42
static
symbol_table_buildert
wrap
(
symbol_table_baset
&
base_symbol_table
)
43
{
44
return
symbol_table_buildert
(
base_symbol_table
);
45
}
46
47
const
symbol_tablet
&
get_symbol_table
()
const override
48
{
49
return
base_symbol_table
.get_symbol_table();
50
}
51
52
void
erase
(
const
symbolst::const_iterator &entry)
override
53
{
54
base_symbol_table
.erase(entry);
55
}
56
57
void
clear
()
override
58
{
59
base_symbol_table
.clear();
60
next_free_suffix_for_prefix
.clear();
61
}
62
63
bool
move
(
symbolt
&symbol,
symbolt
*&new_symbol)
override
64
{
65
return
base_symbol_table
.move(symbol, new_symbol);
66
}
67
68
symbolt
*
get_writeable
(
const
irep_idt
&identifier)
override
69
{
70
return
base_symbol_table
.get_writeable(identifier);
71
}
72
73
std::pair<symbolt &, bool>
insert
(
symbolt
symbol)
override
74
{
75
return
base_symbol_table
.insert(std::move(symbol));
76
}
77
78
iteratort
begin
()
override
79
{
80
return
base_symbol_table
.begin();
81
}
82
83
iteratort
end
()
override
84
{
85
return
base_symbol_table
.end();
86
}
87
88
using
symbol_table_baset::begin
;
89
using
symbol_table_baset::end
;
90
91
void
validate
(
92
const
validation_modet
vm =
validation_modet::INVARIANT
)
const override
93
{
94
base_symbol_table
.validate(vm);
95
}
96
107
std::size_t
next_unused_suffix
(
const
std::string &prefix)
const override
108
{
109
// Check if we have an entry for this particular suffix, if not,
110
// create baseline.
111
auto
suffix_iter =
next_free_suffix_for_prefix
.insert({prefix, 0}).first;
112
std::size_t free_suffix =
113
base_symbol_table
.next_unused_suffix(prefix, suffix_iter->second);
114
suffix_iter->second = free_suffix + 1;
115
return
free_suffix;
116
}
117
};
118
119
#endif
// CPROVER_UTIL_SYMBOL_TABLE_BUILDER_H
symbol_table_baset::iteratort
Definition
symbol_table_base.h:183
symbol_table_baset::symbol_base_map
const symbol_base_mapt & symbol_base_map
Read-only field, used to look up symbol names given their base names.
Definition
symbol_table_base.h:34
symbol_table_baset::symbol_table_baset
symbol_table_baset(const symbolst &symbols, const symbol_base_mapt &symbol_base_map, const symbol_module_mapt &symbol_module_map)
Definition
symbol_table_base.h:42
symbol_table_baset::symbol_module_map
const symbol_module_mapt & symbol_module_map
Read-only field, used to look up symbol names given their modules.
Definition
symbol_table_base.h:39
symbol_table_baset::begin
virtual iteratort begin()=0
symbol_table_baset::symbols
const symbolst & symbols
Read-only field, used to look up symbols given their names.
Definition
symbol_table_base.h:31
symbol_table_baset::end
virtual iteratort end()=0
symbol_table_buildert::symbol_table_buildert
symbol_table_buildert(symbol_table_baset &base_symbol_table)
Definition
symbol_table_builder.h:20
symbol_table_buildert::end
iteratort end() override
Definition
symbol_table_builder.h:83
symbol_table_buildert::symbol_table_buildert
symbol_table_buildert(const symbol_table_buildert &)=delete
symbol_table_buildert::clear
void clear() override
Definition
symbol_table_builder.h:57
symbol_table_buildert::base_symbol_table
symbol_table_baset & base_symbol_table
Definition
symbol_table_builder.h:16
symbol_table_buildert::get_symbol_table
const symbol_tablet & get_symbol_table() const override
Definition
symbol_table_builder.h:47
symbol_table_buildert::operator=
symbol_table_buildert & operator=(const symbol_table_buildert &)=delete
symbol_table_buildert::next_free_suffix_for_prefix
std::map< std::string, std::size_t > next_free_suffix_for_prefix
Definition
symbol_table_builder.h:17
symbol_table_buildert::move
bool move(symbolt &symbol, symbolt *&new_symbol) override
Definition
symbol_table_builder.h:63
symbol_table_buildert::validate
void validate(const validation_modet vm=validation_modet::INVARIANT) const override
Definition
symbol_table_builder.h:91
symbol_table_buildert::insert
std::pair< symbolt &, bool > insert(symbolt symbol) override
Move or copy a new symbol to the symbol table.
Definition
symbol_table_builder.h:73
symbol_table_buildert::next_unused_suffix
std::size_t next_unused_suffix(const std::string &prefix) const override
Try to find the next free identity for the passed-in prefix in this symbol table.
Definition
symbol_table_builder.h:107
symbol_table_buildert::get_writeable
symbolt * get_writeable(const irep_idt &identifier) override
Find a symbol in the symbol table for read-write access.
Definition
symbol_table_builder.h:68
symbol_table_buildert::wrap
static symbol_table_buildert wrap(symbol_table_baset &base_symbol_table)
Definition
symbol_table_builder.h:42
symbol_table_buildert::begin
iteratort begin() override
Definition
symbol_table_builder.h:78
symbol_table_buildert::symbol_table_buildert
symbol_table_buildert(symbol_table_buildert &&other)
Definition
symbol_table_builder.h:29
symbol_table_buildert::operator=
symbol_table_buildert & operator=(symbol_table_buildert &&)=delete
symbol_table_buildert::erase
void erase(const symbolst::const_iterator &entry) override
Remove a symbol from the symbol table.
Definition
symbol_table_builder.h:52
symbol_tablet
The symbol table.
Definition
symbol_table.h:14
symbolt
Symbol table entry.
Definition
symbol.h:28
symbol_table_base.h
Author: Diffblue Ltd.
validation_modet
validation_modet
Definition
validation_mode.h:13
validation_modet::INVARIANT
@ INVARIANT
Definition
validation_mode.h:14
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
util
symbol_table_builder.h
Generated by
1.17.0