#ifndef SERIALIZE_H
#define SERIALIZE_H

void save_quality(const Quality &q, const char * filename);
void restore_quality(Quality &q, const char * filename);
void save_topology(const Topology &t, const char * filename);
void restore_topology(Topology &t, const char * filename);

int quality_check(Quality &q1, Quality &q2);
int ag_check(AssetGroup &ag1, AssetGroup &ag2);
int factbase_check(Factbase &fb1, Factbase &fb2);
int topology_check(Topology &t1, Topology &t2);
int network_state_check(NetworkState &ns1, NetworkState &ns2);

int param_quality_check(ParameterizedQuality &pq1, ParameterizedQuality &pq2);
int param_topology_check(ParameterizedTopology &pt1, ParameterizedTopology &pt2);
int postcond_quality_check(PostconditionQ &pq1, PostconditionQ &pq2);
int postcond_topology_check(PostconditionT &pt1, PostconditionT &pt2);

void serialization_unit_testing(AGGenInstance &instance, boost::mpi::communicator &world);

#endif //SERIALIZE_H

