cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
generic_parameter_specialization_map.cpp
Go to the documentation of this file.
1
2
3
#include "
generic_parameter_specialization_map.h
"
4
5
std::size_t
generic_parameter_specialization_mapt::insert
(
6
const
std::vector<java_generic_parametert> ¶meters,
7
std::vector<reference_typet> types)
8
{
9
PRECONDITION
(!parameters.empty());
10
const
auto
first_param_it =
11
param_to_container
.find(parameters.front().get_name());
12
std::size_t container_index;
13
if
(first_param_it ==
param_to_container
.end())
14
{
15
container_index =
container_to_specializations
.size();
16
container_to_specializations
.emplace_back();
17
std::size_t param_index = 0;
18
for
(
const
java_generic_parametert
¶meter : parameters)
19
{
20
const
auto
result =
param_to_container
.emplace(
21
parameter.get_name(),
container_paramt
{container_index, param_index++});
22
INVARIANT
(
23
result.second,
"Some type parameters are already mapped but not all"
);
24
}
25
}
26
else
27
{
28
container_index = first_param_it->second.container_index;
29
std::size_t param_index = 0;
30
for
(
const
java_generic_parametert
¶meter : parameters)
31
{
32
const
auto
param_it =
param_to_container
.find(parameter.get_name());
33
INVARIANT
(
34
param_it !=
param_to_container
.end(),
35
"Some type parameters are already mapped but not all"
);
36
INVARIANT
(
37
param_it->second.container_index == container_index,
38
"Not all type parameters are assigned to same container"
);
39
INVARIANT
(
40
param_it->second.param_index == param_index,
41
"Type parameters have been encountered in two different orders"
);
42
++param_index;
43
}
44
}
45
container_to_specializations
[container_index].push(std::move(types));
46
return
container_index;
47
}
48
49
void
generic_parameter_specialization_mapt::pop
(std::size_t container_index)
50
{
51
container_to_specializations
.at(container_index).pop();
52
}
53
54
std::optional<reference_typet>
55
generic_parameter_specialization_mapt::pop
(
const
irep_idt
¶meter_name)
56
{
57
const
auto
types_it =
param_to_container
.find(parameter_name);
58
if
(types_it ==
param_to_container
.end())
59
return
{};
60
std::stack<std::vector<reference_typet>> &stack =
61
container_to_specializations
.at(types_it->second.container_index);
62
if
(stack.empty())
63
return
{};
64
reference_typet
result = stack.top().at(types_it->second.param_index);
65
stack.pop();
66
return
result;
67
}
generic_parameter_specialization_mapt::container_to_specializations
std::vector< std::stack< std::vector< reference_typet > > > container_to_specializations
The list of containers and, for each one, the stack of lists of specializations.
Definition
generic_parameter_specialization_map.h:37
generic_parameter_specialization_mapt::insert
std::size_t insert(const std::vector< java_generic_parametert > ¶meters, std::vector< reference_typet > types)
Insert a specialization for each type parameters of a container.
Definition
generic_parameter_specialization_map.cpp:5
generic_parameter_specialization_mapt::param_to_container
std::unordered_map< irep_idt, container_paramt > param_to_container
A map from parameter names to container_paramt instances.
Definition
generic_parameter_specialization_map.h:33
generic_parameter_specialization_mapt::pop
void pop(std::size_t container_index)
Pop the top of the specialization stack for a given container.
Definition
generic_parameter_specialization_map.cpp:49
java_generic_parametert
Reference that points to a java_generic_parameter_tagt.
Definition
java_types.h:775
reference_typet
The reference type.
Definition
pointer_expr.h:121
generic_parameter_specialization_map.h
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
INVARIANT
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Definition
invariant.h:423
generic_parameter_specialization_mapt::container_paramt
The index of the container and the type parameter inside that container.
Definition
generic_parameter_specialization_map.h:28
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
jbmc
src
java_bytecode
generic_parameter_specialization_map.cpp
Generated by
1.17.0