cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
smt_index.h
Go to the documentation of this file.
1
// Author: Diffblue Ltd.
2
3
#ifndef CPROVER_SOLVERS_SMT2_INCREMENTAL_SMT_INDEX_H
4
#define CPROVER_SOLVERS_SMT2_INCREMENTAL_SMT_INDEX_H
5
6
#include <
util/irep.h
>
7
8
class
smt_index_const_downcast_visitort
;
9
13
class
smt_indext
:
protected
irept
14
{
15
public
:
16
// smt_indext does not support the notion of an empty / null state. Use
17
// std::optional<smt_indext> instead if an empty index is required.
18
smt_indext
() =
delete
;
19
20
using
irept::pretty
;
21
22
bool
operator==
(
const
smt_indext
&)
const
;
23
bool
operator!=
(
const
smt_indext
&)
const
;
24
25
template
<
typename
sub_
class
t>
26
const
sub_classt *
cast
() const &;
27
28
void
accept
(
smt_index_const_downcast_visitort
&) const;
29
35
template <typename derivedt>
36
class
storert
37
{
38
protected
:
39
storert
();
40
static
irept
upcast
(
smt_indext
index);
41
static
const
smt_indext
&
downcast
(
const
irept
&);
42
};
43
44
protected
:
45
using
irept::irept
;
46
};
47
48
template
<
typename
derivedt>
49
smt_indext::storert<derivedt>::storert
()
50
{
51
static_assert
(
52
std::is_base_of<irept, derivedt>::value &&
53
std::is_base_of<storert<derivedt>, derivedt>::value,
54
"Only irept based classes need to upcast smt_sortt to store it."
);
55
}
56
57
template
<
typename
derivedt>
58
irept
smt_indext::storert<derivedt>::upcast
(
smt_indext
index)
59
{
60
return
static_cast<
irept
&&
>
(std::move(index));
61
}
62
63
template
<
typename
derivedt>
64
const
smt_indext
&
smt_indext::storert<derivedt>::downcast
(
const
irept
&irep)
65
{
66
return
static_cast<
const
smt_indext
&
>
(irep);
67
}
68
69
class
smt_numeral_indext
:
public
smt_indext
70
{
71
public
:
72
explicit
smt_numeral_indext
(std::size_t
value
);
73
std::size_t
value
()
const
;
74
};
75
76
class
smt_symbol_indext
:
public
smt_indext
77
{
78
public
:
79
explicit
smt_symbol_indext
(
irep_idt
identifier
);
80
irep_idt
identifier
()
const
;
81
};
82
83
class
smt_index_const_downcast_visitort
84
{
85
public
:
86
virtual
void
visit
(
const
smt_numeral_indext
&) = 0;
87
virtual
void
visit
(
const
smt_symbol_indext
&) = 0;
88
};
89
90
#endif
// CPROVER_SOLVERS_SMT2_INCREMENTAL_SMT_INDEX_H
irept::pretty
std::string pretty(unsigned indent=0, unsigned max_indent=0) const
Definition
irep.cpp:482
irept::irept
irept(const irep_idt &_id)
Definition
irep.h:377
smt_index_const_downcast_visitort
Definition
smt_index.h:84
smt_index_const_downcast_visitort::visit
virtual void visit(const smt_symbol_indext &)=0
smt_index_const_downcast_visitort::visit
virtual void visit(const smt_numeral_indext &)=0
smt_indext::storert::upcast
static irept upcast(smt_indext index)
Definition
smt_index.h:58
smt_indext::storert::downcast
static const smt_indext & downcast(const irept &)
Definition
smt_index.h:64
smt_indext::storert::storert
storert()
Definition
smt_index.h:49
smt_indext::operator!=
bool operator!=(const smt_indext &) const
Definition
smt_index.cpp:14
smt_indext::cast
const sub_classt * cast() const &
smt_indext::irept
irept(const irep_idt &_id)
Definition
irep.h:377
smt_indext::operator==
bool operator==(const smt_indext &) const
Definition
smt_index.cpp:9
smt_indext::accept
void accept(smt_index_const_downcast_visitort &) const
Definition
smt_index.cpp:35
smt_indext::smt_indext
smt_indext()=delete
smt_numeral_indext
Definition
smt_index.h:70
smt_numeral_indext::smt_numeral_indext
smt_numeral_indext(std::size_t value)
Definition
smt_index.cpp:44
smt_numeral_indext::value
std::size_t value() const
Definition
smt_index.cpp:50
smt_symbol_indext
Definition
smt_index.h:77
smt_symbol_indext::smt_symbol_indext
smt_symbol_indext(irep_idt identifier)
Definition
smt_index.cpp:55
smt_symbol_indext::identifier
irep_idt identifier() const
Definition
smt_index.cpp:62
irep.h
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
solvers
smt2_incremental
ast
smt_index.h
Generated by
1.17.0