31 {
typedef typename C::value_type value_type;};
33 template <
class K,
class V,
class C,
class A>
34 struct Value_Type<
std::map<K,V,C,A> > {
typedef std::pair<K,V> value_type;};
36 template <
class K,
class V,
class C,
class A>
38 {
typedef std::pair<K,V> value_type;};
58 Iterator(T& container): container(&container) {}
59 void operator=(
const typename T::iterator& i) {T::iterator::operator=(i);}
60 typename T::iterator& iter() {
return *
this;}
61 const typename T::iterator& iter()
const {
return *
this;}
66 class Iterator<const T>:
public T::const_iterator
74 Iterator(
const T& container): container(&container) {}
75 void operator=(
const typename T::const_iterator& i) {T::const_iterator::operator=(i);}
76 typename T::const_iterator& iter() {
return *
this;}
77 const typename T::const_iterator& iter()
const {
return *
this;}
80 template <
class T,
class A>
81 BinStream& BinStream::operator<<(const std::vector<T,A>& x)
85 packer.packraw(reinterpret_cast<const char*>(&x[0]),
86 x.size()*
sizeof(x[0]));
89 template <
class T,
class A>
90 BinStream& BinStream::operator>>(std::vector<T,A>& x)
96 packer.unpackraw(reinterpret_cast<char*>(&x[0]),
97 x.size()*
sizeof(x[0]));
111 for (
typename T::const_iterator i=a.begin(); i!=a.end(); ++i)
115 #if defined(__GNUC__) && !defined(__ICC) 116 #pragma GCC diagnostic push 117 #pragma GCC diagnostic ignored "-Wunused-value" 124 typename T::size_type sz;
125 b >> sz; a.resize(sz);
126 for (
typename T::iterator i=a.begin(); i!=a.end(); ++i)
132 typename T::size_type sz;
134 typename T::value_type x;
135 for (
unsigned i=0; i<sz; ++i) b>>x;
138 #if defined(__GNUC__) && !defined(__ICC) 139 #pragma GCC diagnostic pop 146 template <
class T>
struct access_unpack<classdesc::associative_container<T> >
151 typename T::size_type sz;
154 for (
typename T::size_type i=0; i<sz; ++i)
156 typename classdesc::Value_Type<T>::value_type e;
170 typename T::size_type i=a.container?
171 std::distance(a.container->begin(),a.iter()): 0;
182 typename T::size_type i;
186 a=a.container->begin();
187 std::advance(a.iter(),i);
197 #pragma omit pack std::char_traits 198 #pragma omit unpack std::char_traits 199 #pragma omit pack std::basic_string 200 #pragma omit unpack std::basic_string 201 #pragma omit pack std::string 202 #pragma omit unpack std::string 205 template <
class cT,
class t,
class A>
210 {targ<<arg.
size(); targ.packraw(arg.data(),arg.size());}
213 template <
class cT,
class t,
class A>
216 typedef std::basic_string<cT,t,A> string;
217 void asg(
const string& x,
const std::vector<cT>& b) {}
218 void asg(
string& x,
const std::vector<cT>& b)
221 x=
string(&b[0], b.size()-1);
227 typename string::size_type size; targ>>size;
228 std::vector<cT> buf(size+1);
229 targ.unpackraw(&buf[0],size);
239 #if defined(__GNUC__) && __GNUC__ < 3 245 #pragma omit pack std::pair 246 #pragma omit unpack std::pair 256 ::pack(targ,desc,arg.first);
257 ::pack(targ,desc,arg.second);
272 #pragma omit pack std::plus 273 #pragma omit unpack std::plus 274 #pragma omit pack std::minus 275 #pragma omit unpack std::minus 276 #pragma omit pack std::multiplies 277 #pragma omit unpack std::multiplies 278 #pragma omit pack std::divides 279 #pragma omit unpack std::divides 280 #pragma omit pack std::modulus 281 #pragma omit unpack std::modulus 282 #pragma omit pack negate 283 #pragma omit unpack negate 285 #pragma omit pack equal_to 286 #pragma omit unpack equal_to 287 #pragma omit pack not_equal_to 288 #pragma omit unpack not_equal_to 289 #pragma omit pack less 290 #pragma omit unpack less 291 #pragma omit pack greater 292 #pragma omit unpack greater 293 #pragma omit pack less_equal 294 #pragma omit unpack less_equal 295 #pragma omit pack greater_equal 296 #pragma omit unpack greater_equal 298 #pragma omit pack logical_and 299 #pragma omit unpack logical_and 300 #pragma omit pack logical_or 301 #pragma omit unpack logical_or 302 #pragma omit pack logical_not 303 #pragma omit unpack logical_not 305 #pragma omit pack identity 306 #pragma omit unpack identity 307 #pragma omit pack project1st 308 #pragma omit unpack project1st 309 #pragma omit pack project2nd 310 #pragma omit unpack project2nd 311 #pragma omit pack select1st 312 #pragma omit unpack select1st 313 #pragma omit pack select2nd 314 #pragma omit unpack select2nd 317 #pragma omit pack binary_function 318 #pragma omit unpack binary_function 321 template <
class A1,
class A2,
class R>
322 void pack(
classdesc::pack_t& targ,
const classdesc::string& desc, std::binary_function<A1,A2,R>& arg) {}
324 template <
class A1,
class A2,
class R>
328 #pragma omit pack unary_function 329 #pragma omit unpack unary_function 332 template <
class A,
class R>
335 template <
class A,
class R>
338 template <
class C>
typename 342 template <
class C>
typename size_t size() const
size of buffer
Definition: pack_base.h:154
Definition: pack_base.h:330
Definition: pack_stl.h:27
class to allow access to private members
Definition: classdesc_access.h:21
class to allow access to private members
Definition: classdesc_access.h:22
Iterator()
serialisation is a nop if no container provided
Definition: pack_stl.h:73
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
Contains definitions related to classdesc functionality.
Definition: arrays.h:2514
Definition: pack_base.h:124
controlled template specialisation: stolen from boost::enable_if.
Definition: classdesc.h:249
Definition: pack_stl.h:26
Iterator()
serialisation is a nop if no container provided
Definition: pack_stl.h:57
Definition: pack_stl.h:30
Contains access_* structs, and nothing else. These structs are used to gain access to private members...
Definition: accessor.h:55
Definition: pack_stl.h:50
void unpack(unpack_t &targ, const string &desc, is_treenode dum, T *&arg)
unserialise a tree.
Definition: pack_graph.h:44