CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
boolbv_replication.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module:
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
9#include "boolbv.h"
10
11#include <util/arith_tools.h>
12#include <util/bitvector_expr.h>
13
15{
16 std::size_t width=boolbv_width(expr.type());
17
19
20 bvt bv;
21 bv.resize(width);
22
23 const std::size_t u_times = numeric_cast_v<std::size_t>(times);
24 const bvt &op = convert_bv(expr.op());
25
27 op.size() * u_times == bv.size(),
28 "result bitvector width shall be equal to the operand bitvector width times"
29 "the number of replications");
30
31 std::size_t bit_idx = 0;
32
33 for(std::size_t i = 0; i < u_times; i++)
34 {
35 for(const auto &bit : op)
36 {
37 bv[bit_idx] = bit;
38 bit_idx++;
39 }
40 }
41
42 return bv;
43}
API to expression classes for bitvectors.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
virtual const bvt & convert_bv(const exprt &expr, const std::optional< std::size_t > expected_width={})
Convert expression to vector of literalts, using an internal cache to speed up conversion if availabl...
Definition boolbv.cpp:39
virtual std::size_t boolbv_width(const typet &type) const
Definition boolbv.h:103
virtual bvt convert_replication(const replication_exprt &expr)
typet & type()
Return the type of the expression.
Definition expr.h:84
Bit-vector replication.
constant_exprt & times()
std::vector< literalt > bvt
Definition literal.h:201
BigInt mp_integer
Definition smt_terms.h:17
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Definition invariant.h:423