Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/serialization improvements #704

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/config.inc
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ BUILD_ENV = AUTO

# Select optimisation or debug info
#CXXFLAGS += -O2 -DNDEBUG
CXXFLAGS += -O0 -g
#CXXFLAGS += -O0 -g

ifeq ($(shell uname),Linux)
CXXFLAGS += -DUSE_BOOST
Expand Down
22 changes: 13 additions & 9 deletions src/util/serializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ Purpose: Generic serialization of object hierarchies.
#define CPROVER_UTIL_SERIALIZER_H

#include <utility>
#include <memory>
#include <string>
#include <functional>
#include <vector>
#include <set>
#include <map>
#include <cstdint>
#include <cassert>
#ifdef USE_BOOST
#include <boost/bimap.hpp>
Expand Down Expand Up @@ -66,7 +68,7 @@ class serializert
// Whether this serializer is used for reading rather than writing
bool is_read;
// Traits attached to this serializer
serializer_traitst *traits;
std::shared_ptr<serializer_traitst> traits;

/////////////////////////////////////////////////////////////////////////////
// Section: Constructors/destructors
Expand All @@ -88,7 +90,7 @@ class serializert

\*******************************************************************/
serializert(serializert *parent, bool is_read)
: parent(parent), is_read(is_read), traits(nullptr)
: parent(parent), is_read(is_read)
{
}

Expand All @@ -108,7 +110,7 @@ class serializert

\*******************************************************************/
explicit serializert(bool is_read)
: parent(nullptr), is_read(is_read), traits(nullptr)
: parent(nullptr), is_read(is_read)
{
}

Expand Down Expand Up @@ -160,7 +162,7 @@ class serializert
template<typename traitst>
traitst &get_traits() const
{
traitst * result=dynamic_cast<traitst *>(traits);
traitst * result=dynamic_cast<traitst *>(traits.get());
if(result!=nullptr)
return *result;
assert(parent!=nullptr); // In release build allow undefined behaviour
Expand All @@ -185,10 +187,12 @@ class serializert
Sets traits attached to this serializer.

\*******************************************************************/
void set_traits(serializer_traitst &serializer_traits)
void set_traits(std::shared_ptr<serializer_traitst> serializer_traits)
{
assert(serializer_traits!=nullptr);
// If you need to set_traits twice then make the traits member a set
assert(traits==nullptr);
traits=&serializer_traits;
traits=serializer_traits;
}

/////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -257,7 +261,7 @@ class serializert
Serializes a field.

\*******************************************************************/
virtual void serialize(const char *name, int &field)=0;
virtual void serialize(const char *name, int32_t &field)=0;

/*******************************************************************\

Expand All @@ -273,7 +277,7 @@ class serializert
Serializes a field.

\*******************************************************************/
virtual void serialize(const char *name, unsigned int &field)=0;
virtual void serialize(const char *name, uint32_t &field)=0;

/*******************************************************************\

Expand All @@ -289,7 +293,7 @@ class serializert
Serializes a field.

\*******************************************************************/
virtual void serialize(const char *name, unsigned long long &field)=0;
virtual void serialize(const char *name, uint64_t &field)=0;

/*******************************************************************\

Expand Down