@@ -12,11 +12,13 @@ Purpose: Generic serialization of object hierarchies.
12
12
#define CPROVER_UTIL_SERIALIZER_H
13
13
14
14
#include < utility>
15
+ #include < memory>
15
16
#include < string>
16
17
#include < functional>
17
18
#include < vector>
18
19
#include < set>
19
20
#include < map>
21
+ #include < cstdint>
20
22
#include < cassert>
21
23
#ifdef USE_BOOST
22
24
#include < boost/bimap.hpp>
@@ -66,7 +68,7 @@ class serializert
66
68
// Whether this serializer is used for reading rather than writing
67
69
bool is_read;
68
70
// Traits attached to this serializer
69
- serializer_traitst * traits;
71
+ std::shared_ptr< serializer_traitst> traits;
70
72
71
73
// ///////////////////////////////////////////////////////////////////////////
72
74
// Section: Constructors/destructors
@@ -88,7 +90,7 @@ class serializert
88
90
89
91
\*******************************************************************/
90
92
serializert (serializert *parent, bool is_read)
91
- : parent(parent), is_read(is_read), traits( nullptr )
93
+ : parent(parent), is_read(is_read)
92
94
{
93
95
}
94
96
@@ -108,7 +110,7 @@ class serializert
108
110
109
111
\*******************************************************************/
110
112
explicit serializert (bool is_read)
111
- : parent(nullptr ), is_read(is_read), traits( nullptr )
113
+ : parent(nullptr ), is_read(is_read)
112
114
{
113
115
}
114
116
@@ -160,7 +162,7 @@ class serializert
160
162
template <typename traitst>
161
163
traitst &get_traits () const
162
164
{
163
- traitst * result=dynamic_cast <traitst *>(traits);
165
+ traitst * result=dynamic_cast <traitst *>(traits. get () );
164
166
if (result!=nullptr )
165
167
return *result;
166
168
assert (parent!=nullptr ); // In release build allow undefined behaviour
@@ -185,10 +187,12 @@ class serializert
185
187
Sets traits attached to this serializer.
186
188
187
189
\*******************************************************************/
188
- void set_traits (serializer_traitst & serializer_traits)
190
+ void set_traits (std::shared_ptr< serializer_traitst> serializer_traits)
189
191
{
192
+ assert (serializer_traits!=nullptr );
193
+ // If you need to set_traits twice then make the traits member a set
190
194
assert (traits==nullptr );
191
- traits=& serializer_traits;
195
+ traits=serializer_traits;
192
196
}
193
197
194
198
// ///////////////////////////////////////////////////////////////////////////
@@ -257,7 +261,7 @@ class serializert
257
261
Serializes a field.
258
262
259
263
\*******************************************************************/
260
- virtual void serialize (const char *name, int &field)=0;
264
+ virtual void serialize (const char *name, int32_t &field)=0;
261
265
262
266
/* ******************************************************************\
263
267
@@ -273,7 +277,7 @@ class serializert
273
277
Serializes a field.
274
278
275
279
\*******************************************************************/
276
- virtual void serialize (const char *name, unsigned int &field)=0;
280
+ virtual void serialize (const char *name, uint32_t &field)=0;
277
281
278
282
/* ******************************************************************\
279
283
@@ -289,7 +293,7 @@ class serializert
289
293
Serializes a field.
290
294
291
295
\*******************************************************************/
292
- virtual void serialize (const char *name, unsigned long long &field)=0;
296
+ virtual void serialize (const char *name, uint64_t &field)=0;
293
297
294
298
/* ******************************************************************\
295
299
0 commit comments