@@ -12,11 +12,13 @@ Purpose: Generic serialization of object hierarchies.
1212#define CPROVER_UTIL_SERIALIZER_H
1313
1414#include < utility>
15+ #include < memory>
1516#include < string>
1617#include < functional>
1718#include < vector>
1819#include < set>
1920#include < map>
21+ #include < cstdint>
2022#include < cassert>
2123#ifdef USE_BOOST
2224#include < boost/bimap.hpp>
@@ -66,7 +68,7 @@ class serializert
6668 // Whether this serializer is used for reading rather than writing
6769 bool is_read;
6870 // Traits attached to this serializer
69- serializer_traitst * traits;
71+ std::shared_ptr< serializer_traitst> traits;
7072
7173 // ///////////////////////////////////////////////////////////////////////////
7274 // Section: Constructors/destructors
@@ -88,7 +90,7 @@ class serializert
8890
8991 \*******************************************************************/
9092 serializert (serializert *parent, bool is_read)
91- : parent(parent), is_read(is_read), traits( nullptr )
93+ : parent(parent), is_read(is_read)
9294 {
9395 }
9496
@@ -108,7 +110,7 @@ class serializert
108110
109111 \*******************************************************************/
110112 explicit serializert (bool is_read)
111- : parent(nullptr ), is_read(is_read), traits( nullptr )
113+ : parent(nullptr ), is_read(is_read)
112114 {
113115 }
114116
@@ -160,7 +162,7 @@ class serializert
160162 template <typename traitst>
161163 traitst &get_traits () const
162164 {
163- traitst * result=dynamic_cast <traitst *>(traits);
165+ traitst * result=dynamic_cast <traitst *>(traits. get () );
164166 if (result!=nullptr )
165167 return *result;
166168 assert (parent!=nullptr ); // In release build allow undefined behaviour
@@ -185,10 +187,12 @@ class serializert
185187 Sets traits attached to this serializer.
186188
187189 \*******************************************************************/
188- void set_traits (serializer_traitst & serializer_traits)
190+ void set_traits (std::shared_ptr< serializer_traitst> serializer_traits)
189191 {
192+ assert (serializer_traits!=nullptr );
193+ // If you need to set_traits twice then make the traits member a set
190194 assert (traits==nullptr );
191- traits=& serializer_traits;
195+ traits=serializer_traits;
192196 }
193197
194198 // ///////////////////////////////////////////////////////////////////////////
@@ -257,7 +261,7 @@ class serializert
257261 Serializes a field.
258262
259263 \*******************************************************************/
260- virtual void serialize (const char *name, int &field)=0;
264+ virtual void serialize (const char *name, int32_t &field)=0;
261265
262266 /* ******************************************************************\
263267
@@ -273,7 +277,7 @@ class serializert
273277 Serializes a field.
274278
275279 \*******************************************************************/
276- virtual void serialize (const char *name, unsigned int &field)=0;
280+ virtual void serialize (const char *name, uint32_t &field)=0;
277281
278282 /* ******************************************************************\
279283
@@ -289,7 +293,7 @@ class serializert
289293 Serializes a field.
290294
291295 \*******************************************************************/
292- virtual void serialize (const char *name, unsigned long long &field)=0;
296+ virtual void serialize (const char *name, uint64_t &field)=0;
293297
294298 /* ******************************************************************\
295299
0 commit comments