ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
irep_serialization.h
Go to the documentation of this file.
1#ifndef IREP_SERIALIZATION_H_
2#define IREP_SERIALIZATION_H_
3
4#include <vector>
5#include <util/irep/irep.h>
6
7void write_long(std::ostream &, unsigned);
8void write_string(std::ostream &, const std::string &);
9
11{
12private:
13 struct ul_hash
14 {
15 unsigned short operator()(const unsigned long l) const
16 {
17 return (l & 0xFFFF);
18 }
19 };
20
21 struct ul_eq
22 {
23 bool operator()(const unsigned long l, const unsigned long r) const
24 {
25 return (l == r);
26 }
27 };
28
29 struct irep_full_hash
30 {
31 size_t operator()(const irept &i) const
32 {
33 return i.full_hash();
34 }
35 bool operator()(const irept &i1, const irept &i2) const
36 {
37 return i1.full_hash() < i2.full_hash();
38 }
39 };
40
41 struct irep_content_eq
42 {
43 bool operator()(const irept &l, const irept &r) const
44 {
45 return full_eq(l, r);
46 }
47 };
48
49public:
51 {
52 public:
53 /* Ids are handed out densely and in increasing order on the write side
54 * (reference_convert() uses ireps_on_write.size()), so the read table is
55 * indexed by a dense array index, not a sparse key. */
56 typedef std::vector<irept> irepts_on_readt;
58
59 typedef std::unordered_map<irept, unsigned, irep_full_hash, irep_full_eq>
62
63 typedef std::vector<bool> string_mapt;
65
66 typedef std::vector<std::pair<bool, irep_idt>> string_rev_mapt;
68
69 void clear()
70 {
71 ireps_on_write.clear();
72 ireps_on_read.clear();
73 string_map.clear();
74 string_rev_map.clear();
75 }
76 };
77
78 irep_serializationt(ireps_containert &ic) : ireps_container(ic)
79 {
80 read_buffer.resize(1, 0);
81 clear();
82 };
83
84 void reference_convert(std::istream &, irept &irep);
85 void reference_convert(const irept &irep, std::ostream &);
86
87 irep_idt read_string_ref(std::istream &);
88 void write_string_ref(std::ostream &, const irep_idt &);
89
90 void clear()
91 {
92 ireps_container.clear();
93 }
94
95 static unsigned read_long(std::istream &);
96 irep_idt read_string(std::istream &);
97
98private:
99 ireps_containert &ireps_container;
100 std::vector<char> read_buffer;
101
102 void write_irep(std::ostream &, const irept &irep);
103 void read_irep(std::istream &, irept &irep);
104};
105
106#endif /*IREP_SERIALIZATION_H_*/
Definition irep_idt.h:12
Definition irep_serialization.h:51
irepts_on_writet ireps_on_write
Definition irep_serialization.h:61
string_rev_mapt string_rev_map
Definition irep_serialization.h:67
std::vector< bool > string_mapt
Definition irep_serialization.h:63
irepts_on_readt ireps_on_read
Definition irep_serialization.h:57
std::vector< irept > irepts_on_readt
Definition irep_serialization.h:56
string_mapt string_map
Definition irep_serialization.h:64
void clear()
Definition irep_serialization.h:69
std::unordered_map< irept, unsigned, irep_full_hash, irep_full_eq > irepts_on_writet
Definition irep_serialization.h:60
std::vector< std::pair< bool, irep_idt > > string_rev_mapt
Definition irep_serialization.h:66
static unsigned read_long(std::istream &)
Definition irep_serialization.cpp:110
void write_string_ref(std::ostream &, const irep_idt &)
Definition irep_serialization.cpp:177
irep_idt read_string(std::istream &)
Definition irep_serialization.cpp:143
irep_serializationt(ireps_containert &ic)
Definition irep_serialization.h:78
void reference_convert(std::istream &, irept &irep)
Definition irep_serialization.cpp:34
irep_idt read_string_ref(std::istream &)
Definition irep_serialization.cpp:193
void clear()
Definition irep_serialization.h:90
Definition irep.h:36
size_t full_hash() const
Definition irep.cpp:399
bool full_eq(const irept &i1, const irept &i2)
Definition irep.cpp:207
void write_long(std::ostream &, unsigned)
Definition irep_serialization.cpp:102
void write_string(std::ostream &, const std::string &)
Definition irep_serialization.cpp:131