cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
numbering.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module:
4
5
Author: Daniel Kroening, kroening@kroening.com
6
7
\*******************************************************************/
8
9
#ifndef CPROVER_UTIL_NUMBERING_H
10
#define CPROVER_UTIL_NUMBERING_H
11
12
#include "
invariant.h
"
13
14
#include <optional>
15
#include <unordered_map>
16
#include <vector>
17
20
template
<
typename
keyt,
typename
hasht = std::hash<keyt>>
21
class
numberingt
final
22
{
23
public
:
24
using
number_type
= std::size_t;
// NOLINT
25
using
key_type
= keyt;
// NOLINT
26
27
private
:
28
using
data_typet
= std::vector<key_type>;
// NOLINT
29
data_typet
data_
;
30
std::unordered_map<keyt, number_type, hasht>
numbers_
;
31
32
public
:
33
using
size_type
=
typename
data_typet::size_type;
// NOLINT
34
using
iterator
=
typename
data_typet::iterator;
// NOLINT
35
using
const_iterator
=
typename
data_typet::const_iterator;
// NOLINT
36
37
number_type
number
(
const
key_type
&a)
38
{
39
const
auto
result =
numbers_
.emplace(a,
number_type
(
numbers_
.size()));
40
41
if
(result.second)
// inserted?
42
{
43
data_
.emplace_back(a);
44
INVARIANT
(
data_
.size() ==
numbers_
.size(),
"vector sizes must match"
);
45
}
46
47
return
(result.first)->second;
48
}
49
50
std::optional<number_type>
get_number
(
const
key_type
&a)
const
51
{
52
const
auto
it =
numbers_
.find(a);
53
if
(it ==
numbers_
.end())
54
{
55
return
std::nullopt;
56
}
57
return
it->second;
58
}
59
60
void
clear
()
61
{
62
data_
.clear();
63
numbers_
.clear();
64
}
65
66
size_type
size
()
const
67
{
68
return
data_
.size();
69
}
70
71
const
key_type
&
at
(
size_type
t)
const
72
{
73
return
data_
.at(t);
74
}
75
76
key_type
&
operator[]
(
size_type
t)
77
{
78
return
data_
[t];
79
}
80
const
key_type
&
operator[]
(
size_type
t)
const
81
{
82
return
data_
[t];
83
}
84
85
iterator
begin
()
86
{
87
return
data_
.begin();
88
}
89
const_iterator
begin
()
const
90
{
91
return
data_
.begin();
92
}
93
const_iterator
cbegin
()
const
94
{
95
return
data_
.cbegin();
96
}
97
98
iterator
end
()
99
{
100
return
data_
.end();
101
}
102
const_iterator
end
()
const
103
{
104
return
data_
.end();
105
}
106
const_iterator
cend
()
const
107
{
108
return
data_
.cend();
109
}
110
};
111
112
113
#endif
// CPROVER_UTIL_NUMBERING_H
numberingt
Definition
numbering.h:22
numberingt< irep_idt >::key_type
irep_idt key_type
Definition
numbering.h:25
numberingt::number
number_type number(const key_type &a)
Definition
numbering.h:37
numberingt::get_number
std::optional< number_type > get_number(const key_type &a) const
Definition
numbering.h:50
numberingt::cend
const_iterator cend() const
Definition
numbering.h:106
numberingt< irep_idt >::size_type
typename data_typet::size_type size_type
Definition
numbering.h:33
numberingt< irep_idt >::data_
data_typet data_
Definition
numbering.h:29
numberingt::size
size_type size() const
Definition
numbering.h:66
numberingt::at
const key_type & at(size_type t) const
Definition
numbering.h:71
numberingt< irep_idt >::data_typet
std::vector< key_type > data_typet
Definition
numbering.h:28
numberingt::begin
const_iterator begin() const
Definition
numbering.h:89
numberingt::clear
void clear()
Definition
numbering.h:60
numberingt::begin
iterator begin()
Definition
numbering.h:85
numberingt::operator[]
key_type & operator[](size_type t)
Definition
numbering.h:76
numberingt::end
const_iterator end() const
Definition
numbering.h:102
numberingt::end
iterator end()
Definition
numbering.h:98
numberingt< irep_idt >::numbers_
std::unordered_map< irep_idt, number_type, std::hash< irep_idt > > numbers_
Definition
numbering.h:30
numberingt::cbegin
const_iterator cbegin() const
Definition
numbering.h:93
numberingt< irep_idt >::number_type
std::size_t number_type
Definition
numbering.h:24
numberingt::operator[]
const key_type & operator[](size_type t) const
Definition
numbering.h:80
numberingt< irep_idt >::const_iterator
typename data_typet::const_iterator const_iterator
Definition
numbering.h:35
numberingt< irep_idt >::iterator
typename data_typet::iterator iterator
Definition
numbering.h:34
invariant.h
INVARIANT
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Definition
invariant.h:423
util
numbering.h
Generated by
1.17.0