cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
literal_vector_expr.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_SOLVERS_FLATTENING_LITERAL_VECTOR_EXPR_H
10
#define CPROVER_SOLVERS_FLATTENING_LITERAL_VECTOR_EXPR_H
11
12
#include <
util/std_expr.h
>
13
#include <
util/string2int.h
>
14
15
#include <
solvers/prop/literal.h
>
16
17
class
literal_vector_exprt
:
public
nullary_exprt
18
{
19
public
:
20
literal_vector_exprt
(
const
bvt
&__bv,
typet
__type)
21
:
nullary_exprt
(ID_literal_vector,
std
::move(__type))
22
{
23
bv
(__bv);
24
}
25
26
bvt
bv
()
const
27
{
28
auto
&sub =
find
(ID_literals).
get_sub
();
29
bvt
result;
30
result.reserve(sub.size());
31
for
(
auto
&literal_irep : sub)
32
{
33
literalt
l;
34
l.
set
(
literalt::var_not
(
35
unsafe_string2signedlonglong
(literal_irep.id_string())));
36
result.push_back(l);
37
}
38
return
result;
39
}
40
41
void
bv
(
const
bvt
&
bv
)
42
{
43
auto
&sub =
add
(ID_literals).
get_sub
();
44
sub.clear();
45
sub.reserve(
bv
.size());
46
for
(
auto
&literal :
bv
)
47
sub.emplace_back(
irept
{std::to_string(literal.get())});
48
}
49
};
50
51
template
<>
52
inline
bool
can_cast_expr<literal_vector_exprt>
(
const
exprt
&base)
53
{
54
return
base.
id
() == ID_literal_vector;
55
}
56
62
inline
const
literal_vector_exprt
&
to_literal_vector_expr
(
const
exprt
&expr)
63
{
64
PRECONDITION
(expr.
id
() == ID_literal_vector);
65
literal_vector_exprt::check
(expr);
66
return
static_cast<
const
literal_vector_exprt
&
>
(expr);
67
}
68
71
inline
literal_vector_exprt
&
to_literal_vector_expr
(
exprt
&expr)
72
{
73
PRECONDITION
(expr.
id
() == ID_literal_vector);
74
literal_vector_exprt::check
(expr);
75
return
static_cast<
literal_vector_exprt
&
>
(expr);
76
}
77
78
#endif
// CPROVER_SOLVERS_FLATTENING_LITERAL_VECTOR_EXPR_H
exprt
Base class for all expressions.
Definition
expr.h:57
exprt::check
static void check(const exprt &, const validation_modet=validation_modet::INVARIANT)
Check that the expression is well-formed (shallow checks only, i.e., subexpressions and its type are ...
Definition
expr.h:260
irept
There are a large number of kinds of tree structured or tree-like data in CPROVER.
Definition
irep.h:364
irept::find
const irept & find(const irep_idt &name) const
Definition
irep.cpp:93
irept::get_sub
subt & get_sub()
Definition
irep.h:448
irept::id
const irep_idt & id() const
Definition
irep.h:388
irept::add
irept & add(const irep_idt &name)
Definition
irep.cpp:103
literal_vector_exprt
Definition
literal_vector_expr.h:18
literal_vector_exprt::literal_vector_exprt
literal_vector_exprt(const bvt &__bv, typet __type)
Definition
literal_vector_expr.h:20
literal_vector_exprt::bv
bvt bv() const
Definition
literal_vector_expr.h:26
literal_vector_exprt::bv
void bv(const bvt &bv)
Definition
literal_vector_expr.h:41
literalt
Definition
literal.h:26
literalt::var_not
unsigned var_not
Definition
literal.h:31
literalt::set
void set(var_not _l)
Definition
literal.h:93
nullary_exprt::nullary_exprt
nullary_exprt(const irep_idt &_id, typet _type)
Definition
std_expr.h:25
typet
The type of an expression, extends irept.
Definition
type.h:29
literal.h
bvt
std::vector< literalt > bvt
Definition
literal.h:201
to_literal_vector_expr
const literal_vector_exprt & to_literal_vector_expr(const exprt &expr)
Cast a generic exprt to a literal_vector_exprt.
Definition
literal_vector_expr.h:62
can_cast_expr< literal_vector_exprt >
bool can_cast_expr< literal_vector_exprt >(const exprt &base)
Definition
literal_vector_expr.h:52
std
STL namespace.
PRECONDITION
#define PRECONDITION(CONDITION)
Definition
invariant.h:463
std_expr.h
API to expression classes.
unsafe_string2signedlonglong
signed long long int unsafe_string2signedlonglong(const std::string &str, int base)
Definition
string2int.cpp:45
string2int.h
solvers
flattening
literal_vector_expr.h
Generated by
1.17.0