13#ifndef CLASSDESC_PACK_GRAPH_H
14#define CLASSDESC_PACK_GRAPH_H
32 pack(targ,desc,valid);
36 pack(targ,desc,valid);
53 arg=
static_cast<T*
>(targ.alloced.back().data());
73 template <
class T>
struct Alloc;
77 void operator()(
pack_t& buf,
T*& x) {
79 x=
static_cast<T*
>(buf.alloced.back().data());
84 inline void pack_graph(
pack_t& buf,
T& arg)
86 static std::map<T,int> graph_map;
87 static std::vector<T*> restart;
88 static unsigned recur_level=0;
96 restart.push_back(&arg);
98 pack(buf,
string(),nought);
99 else if (graph_map.count(arg)==0)
101 int ID=graph_map.size()+1;
103 pack(buf,
string(),ID);
104 pack(buf,
string(),*arg);
107 pack(buf,
string(),graph_map[arg]);
112 while (restart.size())
114 T& aa=*restart.back();
123 void unpack_graph(
pack_t& buf,
T& arg)
125 static std::map<int,T> graph_map;
126 static std::vector<T*> restart;
127 static unsigned recur_level=0;
132 unpack(buf,
string(),buf.recur_max);
135 if (recur_level==buf.recur_max)
136 restart.push_back(&arg);
139 unpack(buf,
string(),myid);
142 else if (graph_map.count(myid))
148 unpack(buf,
string(),*arg);
155 while (restart.size())
157 T& aa=*restart.back();
159 unpack_graph(buf,aa);
171 {pack_graph(targ,arg);}
177 {unpack_graph(targ,arg);}
Definition classdesc.h:931
Definition classdesc.h:930
Definition pack_base.h:138
unsigned recur_max
recursion limit for pack_graph
Definition pack_base.h:166
Contains definitions related to classdesc functionality.
void pack(pack_t &targ, const string &desc, is_treenode dum, const T *const &arg)
serialise a tree (or DAG)
Definition pack_graph.h:28
void unpack(unpack_t &targ, const string &desc, is_treenode dum, T *&arg)
unserialise a tree.
Definition pack_graph.h:44
Definition pack_graph.h:73
Definition pack_base.h:114