forked from klee/klee
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathSparseStorage.cpp
86 lines (82 loc) · 1.99 KB
/
SparseStorage.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "klee/ADT/SparseStorage.h"
#include "klee/Expr/Expr.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/raw_ostream.h"
namespace klee {
template <>
void SparseStorage<unsigned char>::print(llvm::raw_ostream &os,
Density d) const {
if (d == Density::Sparse) {
// "Sparse representation"
os << "{";
bool firstPrinted = false;
auto ordered = calculateOrderedStorage();
for (const auto &element : ordered) {
if (firstPrinted) {
os << ", ";
}
os << element.first << ": " << element.second;
firstPrinted = true;
}
os << "} default: ";
} else {
// "Dense representation"
os << "[";
bool firstPrinted = false;
for (size_t i = 0; i < sizeOfSetRange(); i++) {
if (firstPrinted) {
os << ", ";
}
os << llvm::utostr(load(i));
firstPrinted = true;
}
os << "] default: ";
}
os << ((unsigned)defaultValue);
}
template <>
void SparseStorage<ref<ConstantExpr>>::print(llvm::raw_ostream &os,
Density d) const {
if (d == Density::Sparse) {
// "Sparse representation"
os << "{";
bool firstPrinted = false;
auto ordered = calculateOrderedStorage();
for (const auto &element : ordered) {
if (firstPrinted) {
os << ", ";
}
os << element.first << ": ";
if (element.second) {
os << element.second;
} else {
os << "null";
}
firstPrinted = true;
}
os << "} default: ";
} else {
// "Dense representation"
os << "[";
bool firstPrinted = false;
for (size_t i = 0; i < sizeOfSetRange(); i++) {
if (firstPrinted) {
os << ", ";
}
auto expr = load(i);
if (expr) {
os << expr;
} else {
os << "null";
}
firstPrinted = true;
}
os << "] default: ";
}
if (defaultValue) {
os << defaultValue;
} else {
os << "null";
}
}
} // namespace klee