uLib-0.2
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Archives.h
Go to the documentation of this file.
1 /*//////////////////////////////////////////////////////////////////////////////
2 // CMT Cosmic Muon Tomography project //////////////////////////////////////////
4 
5  Copyright (c) 2014, Universita' degli Studi di Padova, INFN sez. di Padova
6  All rights reserved
7 
8  Authors: Andrea Rigoni Garola < andrea.rigoni@pd.infn.it >
9 
10  ------------------------------------------------------------------
11  This library is free software; you can redistribute it and/or
12  modify it under the terms of the GNU Lesser General Public
13  License as published by the Free Software Foundation; either
14  version 3.0 of the License, or (at your option) any later version.
15 
16  This library is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  Lesser General Public License for more details.
20 
21  You should have received a copy of the GNU Lesser General Public
22  License along with this library.
23 
25 
26 
27 
28 #ifndef U_CORE_ARCHIVES_H
29 #define U_CORE_ARCHIVES_H
30 
31 
32 #include <boost/archive/detail/basic_pointer_iserializer.hpp>
33 #include <boost/archive/detail/basic_pointer_oserializer.hpp>
34 
35 #include <boost/archive/text_iarchive.hpp>
36 #include <boost/archive/text_oarchive.hpp>
37 
38 #include <boost/archive/xml_iarchive.hpp>
39 #include <boost/archive/xml_oarchive.hpp>
40 
41 #include <boost/archive/detail/register_archive.hpp>
42 
43 #include <boost/archive/polymorphic_iarchive.hpp>
44 #include <boost/archive/polymorphic_oarchive.hpp>
45 #include <boost/archive/detail/polymorphic_iarchive_route.hpp>
46 #include <boost/archive/detail/polymorphic_oarchive_route.hpp>
47 
48 #include <boost/archive/polymorphic_text_oarchive.hpp>
49 
50 #include "StringReader.h"
51 
52 
53 
57 // FWD DECLARATIONS OF ARCHIVES //
58 
59 
60 
61 
62 namespace uLib {
63 namespace Archive {
64 
65 class xml_iarchive;
66 class xml_oarchive;
67 class text_iarchive;
68 class text_oarchive;
69 class log_archive;
70 
71 
72 }
73 }
74 
75 
76 namespace boost {
77 namespace archive {
78 namespace detail {
79 template<class ArchiveImplementation> class polymorphic_oarchive_route;
80 template<class ArchiveImplementation> class polymorphic_iarchive_route;
81 }
82 }
83 }
84 
85 namespace boost {
86 namespace serialization {
87  template <typename T> struct hrp;
88 }
89 }
90 
91 
95 // ARCHIVES REGISTRATION //
96 
97 
98 namespace uLib {
99 namespace Archive {
100 namespace detail {
101 struct adl_tag {};
102 }
103 }
104 }
105 
106 namespace boost {
107 namespace archive {
108 namespace detail {
109 // This function gets called, but its only purpose is to participate
110 // in overload resolution with the functions declared by
111 // BOOST_SERIALIZATION_REGISTER_ARCHIVE, below.
112 template <class Serializable>
113 void instantiate_ptr_serialization(Serializable*, int, uLib::Archive::detail::adl_tag ) {}
114 }
115 }
116 }
117 
118 // The function declaration generated by this macro never actually
119 // gets called, but its return type gets instantiated, and that's
120 // enough to cause registration of serialization functions between
121 // Archive and any exported Serializable type. See also:
122 // boost/serialization/export.hpp
123 # define ULIB_SERIALIZATION_REGISTER_ARCHIVE(_Archive) \
124 namespace boost { namespace archive { namespace detail { \
125  \
126 template <class Serializable> \
127 BOOST_DEDUCED_TYPENAME _ptr_serialization_support<_Archive, Serializable>::type \
128 instantiate_ptr_serialization( Serializable*, _Archive*, uLib::Archive::detail::adl_tag ); }}}
129 
130 
131 
132 
133 
134 
138 // ARCHIVES IO INTERFACES //
139 
140 
141 namespace boost {
142 namespace archive {
143 namespace detail {
144 
148 template<class Archive>
149 class uLib_interface_iarchive
150 {
151 protected:
152  uLib_interface_iarchive(){};
153 public:
155  // archive public interface
156  typedef mpl::bool_<true> is_loading;
157  typedef mpl::bool_<false> is_saving;
158 
159  // return a pointer to the most derived class
160  Archive * This(){
161  return static_cast<Archive *>(this);
162  }
163 
164  template<class T>
165  const basic_pointer_iserializer *
166  register_type(T * = NULL){
167  const basic_pointer_iserializer & bpis =
168  boost::serialization::singleton<
169  pointer_iserializer<Archive, T>
170  >::get_const_instance();
171  this->This()->register_basic_serializer(bpis.get_basic_serializer());
172  return & bpis;
173  }
174  template<class T>
175  Archive & operator>>(T & t){
176  this->This()->load_override(t, 0);
177  return * this->This();
178  }
179 
180  // the & operator
181  template<class T>
182  Archive & operator&(T & t){
183  return *(this->This()) >> t;
184  }
185 
186  // the == operator
187  template <class T>
188  Archive & operator == (T & t) {
189  return this->operator &(t);
190  }
191 
192  // the != operator for human readable access
193  template <class T>
194  Archive & operator != (T & t) {
195  std::cerr << std::flush << "cauch string: " << t << "\n"; // REMOVE THIS !
196  return * this->This();
197  }
198 };
199 
200 
204 template <class Archive>
205 class uLib_interface_oarchive {
206 protected:
207  uLib_interface_oarchive(){};
208 public:
210  // archive public interface
211  typedef mpl::bool_<false> is_loading;
212  typedef mpl::bool_<true> is_saving;
213 
214  // return a pointer to the most derived class
215  Archive * This(){
216  return static_cast<Archive *>(this);
217  }
218 
219  template<class T>
220  const basic_pointer_oserializer *
221  register_type(const T * = NULL){
222  const basic_pointer_oserializer & bpos =
223  boost::serialization::singleton<
224  pointer_oserializer<Archive, T>
225  >::get_const_instance();
226  this->This()->register_basic_serializer(bpos.get_basic_serializer());
227  return & bpos;
228  }
229 
230  template<class T>
231  Archive & operator<<(T & t){
232  // to get access you must redefine save_override by typing
233  // "using save_override" in archive impl
234  this->This()->save_override(t, 0);
235  return * this->This();
236  }
237 
238  // the & operator
239  template<class T>
240  Archive & operator&(T & t){
241  #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
242  return * this->This() << const_cast<const T &>(t);
243  #else
244  return * this->This() << t;
245  #endif
246  }
247 
248  // the == operator
249  template <class T>
250  Archive & operator == (T & t) {
251  return this->operator &(t);
252  }
253 
254  // the != operator for human readable access
255  template <class T>
256  Archive & operator != (T & t) {
257  std::cerr << std::flush << "cauch string: " << t << "\n"; // REMOVE THIS !
258  return * this->This();
259  }
260 };
261 
262 
263 
264 // DECLARE INTERFACE SPECIALIZATIONS ///////////////////////////////////////////
265 // With this declarations all uLib archive Implementation will use their own
266 // extended interface //
267 
268 template <>
269 class interface_iarchive <uLib::Archive::xml_iarchive> : public
270  uLib_interface_iarchive <uLib::Archive::xml_iarchive> {};
271 
272 template <>
273 class interface_oarchive <uLib::Archive::xml_oarchive> : public
274  uLib_interface_oarchive <uLib::Archive::xml_oarchive> {};
275 
276 template <>
277 class interface_iarchive <uLib::Archive::text_iarchive> : public
278  uLib_interface_iarchive <uLib::Archive::text_iarchive> {};
279 
280 template <>
281 class interface_oarchive <uLib::Archive::text_oarchive> : public
282  uLib_interface_oarchive <uLib::Archive::text_oarchive> {};
283 
284 template <>
285 class interface_oarchive <uLib::Archive::log_archive> : public
286  uLib_interface_oarchive <uLib::Archive::log_archive> {};
287 
288 
290 //#define _DECL_INTERFACE_ARCHIVE_V(vz,vn,vdata) \
291 // template <class TypeSeq> \
292 // struct inherit_nofold<TypeSeq,BOOST_PP_INC(vn)> : \
293 // BOOST_PP_REPEAT(BOOST_PP_INC(vn),_INERIT_NOFOLD_H,~) \
294 // {};
295 
297 //BOOST_PP_REPEAT(ULIB_CFG_MPL_INERIT_NOFOLD_MAXSIZE,_INERIT_NOFOLD_V,~)
298 
299 //#undef _INERIT_NOFOLD_H
300 //#undef _INERIT_NOFOLD_V
301 
302 
303 } // detail
304 } // archive
305 } // boost
306 
307 
308 
309 
310 
311 
312 
313 
314 
315 
316 
317 
318 
328 // ARCHIVES DEFINITIONS //
329 
330 namespace boost {
331 namespace archive {
332 
333 //template<class Archive>
334 //inline void load_const_override(Archive & ar, const char *t ){
335 // typedef typename mpl::identity<detail::load_non_pointer_type<Archive> >::type typex;
336 // typex::invoke(ar, t);
337 //}
338 
339 //template<class Archive, class T>
340 //inline void load(Archive & ar, T &t){
341 // // if this assertion trips. It means we're trying to load a
342 // // const object with a compiler that doesn't have correct
343 // // funtion template ordering. On other compilers, this is
344 // // handled below.
345 // // detail::check_const_loading< T >();
346 // typedef
347 // BOOST_DEDUCED_TYPENAME mpl::eval_if<is_pointer< T >,
348 // mpl::identity<detail::load_pointer_type<Archive> >
349 // ,//else
350 // BOOST_DEDUCED_TYPENAME mpl::eval_if<is_array< T >,
351 // mpl::identity<detail::load_array_type<Archive> >
352 // ,//else
353 // BOOST_DEDUCED_TYPENAME mpl::eval_if<is_enum< T >,
354 // mpl::identity<detail::load_enum_type<Archive> >
355 // ,//else
356 // mpl::identity<detail::load_non_pointer_type<Archive> >
357 // >
358 // >
359 // >::type typex;
360 // typex::invoke(ar, t);
361 //}
362 
363 
364 
365 }
366 }
367 
368 
369 
370 
371 namespace uLib {
372 
373 namespace Archive {
374 
375 
379 // POLYMORPHIC //
380 
381 
382 //class polymorphic_iarchive :
383 // public boost::archive::polymorphic_iarchive {
384 
385 //public:
386 // void load_override(const char *t, BOOST_PFTO int)
387 // {
388 // boost::archive::load_const_override(* this->This(), const_cast<char*>(t));
389 // }
390 
391 //};
392 
393 
397 // XML //
398 
399 class xml_iarchive :
400  public boost::archive::xml_iarchive_impl<xml_iarchive>
401 {
402  typedef xml_iarchive Archive;
403  typedef boost::archive::xml_iarchive_impl<Archive> base;
404 
405  // give serialization implementation access to this class
406  friend class boost::archive::detail::interface_iarchive<Archive>;
407  friend class boost::archive::basic_xml_iarchive<Archive>;
408  friend class boost::archive::load_access;
409 public:
410  xml_iarchive(std::istream & is, unsigned int flags = 0) :
411  xml_iarchive_impl<xml_iarchive>(is, flags)
412  {}
413 
414  using basic_xml_iarchive::load_override;
415 
416  // Anything not an attribute should be a name value pair as nvp or hrp
417  typedef boost::archive::detail::common_iarchive<Archive> detail_common_iarchive;
418  template<class T>
419  void load_override(
420  #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
421  const
422  #endif
423  boost::serialization::hrp< T > & t,
424  int v
425  ){
426  this->This()->load_start(t.name());
427  this->detail_common_iarchive::load_override(t.value(), 0);
428 // t.stov();
429  this->This()->load_end(t.name());
430  }
431 
432 
433  // class_name_type can't be handled here as it depends upon the
434  // char type used by the stream. So require the derived implementation.
435  // derived in this case is xml_iarchive_impl or base ..
436  using base::load_override;
437 
438  void load_override(const char *str, int v) {
439  // StringReader sr(basic_text_iprimitive::is);
440  // sr >> str;
441  }
442 
443  ~xml_iarchive(){};
444 };
445 
446 //typedef boost::archive::detail::polymorphic_iarchive_route<
447 //boost::archive::xml_iarchive_impl<xml_iarchive>
448 //> polymorphic_xml_iarchive;
449 
450 template <class ArchiveImpl>
451 struct polymorphic_iarchive_route :
452  boost::archive::detail::polymorphic_iarchive_route<ArchiveImpl>
453 {
454  virtual void load(const char * t){
455  ArchiveImpl::load(t);
456  }
457 };
458 
459 
460 class polymorphic_xml_iarchive :
461  public polymorphic_iarchive_route< boost::archive::xml_iarchive_impl<xml_iarchive> >
462 {
463  // give serialization implementation access to this class
464 // friend class boost::archive::detail::interface_iarchive<Archive>;
465 // friend class boost::archive::basic_xml_iarchive<Archive>;
466 // friend class boost::archive::load_access;
467 public:
468  virtual void load_override(const char *str, int v) {
469  ;
470  }
471 };
472 
473 
474 
475 class xml_oarchive :
476  public boost::archive::xml_oarchive_impl<xml_oarchive>
477 {
478  typedef xml_oarchive Archive;
479  typedef boost::archive::xml_oarchive_impl<Archive> base;
480 
481  // give serialization implementation access to this class
482  friend class boost::archive::detail::interface_oarchive<Archive>;
483  friend class boost::archive::basic_xml_oarchive<Archive>;
484  friend class boost::archive::save_access;
485 public:
486  xml_oarchive(std::ostream & os, unsigned int flags = 0) :
487  boost::archive::xml_oarchive_impl<xml_oarchive>(os, flags)
488  {}
489 
490  // example of implementing save_override for const char* //
491  // void save_override(const char *t, int) {
492  // std::cout << "found char: " << t << "\n";
493  // }
494 
495  using basic_xml_oarchive::save_override;
496 
497  // special treatment for name-value pairs.
498  typedef boost::archive::detail::common_oarchive<Archive> detail_common_oarchive;
499  template<class T>
500  void save_override(
501  #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
502  const
503  #endif
504  ::boost::serialization::hrp< T > & t,
505  int v
506  ){
507  this->This()->save_start(t.name());
508 // t.vtos();
509 // this->detail_common_oarchive::save_override(t.const_value(), 0);
510  this->This()->save_end(t.name());
511  }
512 
513  void save_override(const char *str, int v) {
514  // Do not save any human decoration string //
515  // basic_text_oprimitive::save(str);
516  }
517 
518  ~xml_oarchive(){}
519 };
520 
521 //typedef boost::archive::detail::polymorphic_oarchive_route<
522 //boost::archive::xml_oarchive_impl<xml_oarchive>
523 //> polymorphic_xml_oarchive;
524 
528 // TEXT //
529 
530 class text_iarchive :
531  public boost::archive::text_iarchive_impl<text_iarchive>
532 {
533  typedef text_iarchive Archive;
534  typedef boost::archive::text_iarchive_impl<Archive> base;
535 
536  // give serialization implementation access to this class
537  friend class boost::archive::detail::interface_iarchive<Archive>;
538  friend class boost::archive::basic_text_iarchive<Archive>;
539  friend class boost::archive::load_access;
540 public:
541  text_iarchive(std::istream & is, unsigned int flags = 0) :
542  text_iarchive_impl<Archive>(is, flags)
543  {}
544 
545  using basic_text_iarchive::load_override;
546 
547  void load_override(boost::archive::object_id_type & t, int) {}
548 
549  // class_name_type can't be handled here as it depends upon the
550  // char type used by the stream. So require the derived implementation.
551  // derived in this case is xml_iarchive_impl or base ..
552  using base::load_override;
553 
554  void load_override(const char *str, int v) {
555  StringReader sr(basic_text_iprimitive::is);
556  sr >> str;
557  }
558 
559  ~text_iarchive() {};
560 };
561 
562 typedef text_iarchive naked_text_iarchive;
563 
564 //typedef boost::archive::detail::polymorphic_iarchive_route<
565 //naked_text_iarchive
566 //> polymorphic_text_iarchive;
567 
568 
569 
570 class text_oarchive :
571  public boost::archive::text_oarchive_impl<text_oarchive>
572 {
573  typedef text_oarchive Archive;
574  typedef boost::archive::text_oarchive_impl<Archive> base;
575 
576  // give serialization implementation access to this class
577  friend class boost::archive::detail::interface_oarchive<Archive>;
578  friend class boost::archive::basic_text_oarchive<Archive>;
579  friend class boost::archive::save_access;
580 public:
581  text_oarchive(std::ostream & os, unsigned int flags = 0) :
582  boost::archive::text_oarchive_impl<Archive>(os, flags)
583  {}
584 
585  using basic_text_oarchive::save_override;
586 
587  void save_override(const char *str, int v) {
588  basic_text_oprimitive::save(str);
589  }
590 
591  ~text_oarchive(){}
592 };
593 
594 //typedef boost::archive::detail::polymorphic_oarchive_route<
595 //boost::archive::text_oarchive_impl<text_oarchive>
596 //> polymorphic_text_oarchive;
597 
598 
602 // SIMPLE HUMAN READABLE TEXT //
603 
604 class hrt_iarchive :
605  public boost::archive::text_iarchive_impl<hrt_iarchive>
606 {
607  typedef hrt_iarchive Archive;
608  typedef boost::archive::text_iarchive_impl<Archive> base;
609 
610  // give serialization implementation access to this class
611  friend class boost::archive::detail::interface_iarchive<Archive>;
612  friend class boost::archive::basic_text_iarchive<Archive>;
613  friend class boost::archive::load_access;
614 public:
615  hrt_iarchive(std::istream & is, unsigned int flags = 0) :
616  base(is, flags | boost::archive::no_header )
617  {}
618 
619  using basic_text_iarchive::load_override;
620 
621  // hide all archive props //
622  void load_override( boost::archive::object_id_type & t, int) {}
623  void load_override( boost::archive::object_reference_type & t, int) {}
624  void load_override( boost::archive::version_type & t, int) {}
625  void load_override( boost::archive::class_id_type & t, int) {}
626  void load_override( boost::archive::class_id_optional_type & t, int) {}
627  void load_override( boost::archive::class_id_reference_type & t, int){}
628  void load_override( boost::archive::class_name_type & t, int) {}
629  void load_override( boost::archive::tracking_type & t, int) {}
630 
631  // class_name_type can't be handled here as it depends upon the
632  // char type used by the stream. So require the derived implementation.
633  // derived in this case is xml_iarchive_impl or base ..
634  using base::load_override;
635 
636  void load_override(const char *str, int v) {
637  StringReader sr(basic_text_iprimitive::is);
638  sr >> str;
639  }
640 
641  ~hrt_iarchive() {};
642 };
643 
644 
645 class hrt_oarchive :
646  public boost::archive::text_oarchive_impl<hrt_oarchive>
647  {
648  typedef hrt_oarchive Archive;
649  typedef boost::archive::text_oarchive_impl<Archive> base;
650 
651  // give serialization implementation access to this class
652  friend class boost::archive::detail::interface_oarchive<Archive>;
653  friend class boost::archive::basic_text_oarchive<Archive>;
654  friend class boost::archive::save_access;
655  public:
656  hrt_oarchive(std::ostream & os, unsigned int flags = 0) :
657  base(os, flags | boost::archive::no_header )
658  {}
659 
660  using basic_text_oarchive::save_override;
661 
662  void save_override(const boost::archive::object_id_type & t, int) {}
663  void save_override(const boost::archive::object_reference_type & t, int) {}
664  void save_override(const boost::archive::version_type & t, int) {}
665  void save_override(const boost::archive::class_id_type & t, int) {}
666  void save_override(const boost::archive::class_id_optional_type & t, int) {}
667  void save_override(const boost::archive::class_id_reference_type & t, int){}
668  void save_override(const boost::archive::class_name_type & t, int) {}
669  void save_override(const boost::archive::tracking_type & t, int) {}
670 
671 
672  void save_override(const char *str, int v) {
673  basic_text_oprimitive::save(str);
674  }
675 
676  ~hrt_oarchive(){}
677  };
678 
679 
680 
681 
685 // XML FOR LOG OUTPUT PURPOUSE //
686 
688 // log data to an output stream. This illustrates a simpler implemenation
689 // of text output which is useful for getting a formatted display of
690 // any serializable class. Intended to be useful as a debugging aid.
691 class log_archive :
692  /* protected ? */
693  public boost::archive::xml_oarchive_impl<log_archive>
694 {
695  typedef boost::archive::xml_oarchive_impl<log_archive> base;
696  typedef log_archive Archive;
697  // give serialization implementation access to this clas
698  friend class boost::archive::detail::interface_oarchive<log_archive>;
699  friend class boost::archive::basic_xml_oarchive<log_archive>;
700  friend class boost::archive::save_access;
701 
702 public:
703 
704  void save_override(const char *str, int v) {
705  // Do not save any human decoration string //
706  // basic_text_oprimitive::save(str);
707  }
708 
709  template<class T>
710  void save_override(T & t, BOOST_PFTO int){
711  base::save_override(boost::serialization::make_nvp(NULL, t), 0);
712  }
713 
714  // activate this if you want to trap non nvp objects //
715  // template<class T>
716  // void save_override(T & t, BOOST_PFTO int)
717  // {
718  // BOOST_MPL_ASSERT((boost::serialization::is_wrapper< T >));
719  // // this->detail_common_oarchive::save_override(t, 0);
720  // }
721 
722  template<class T>
723  void save_override(const boost::serialization::nvp<T> & t, int){
724  base::save_override(t, 0);
725  }
726 
727 
728  // specific overrides for attributes - not name value pairs so we
729  // want to trap them before the above "fall through"
730  // since we don't want to see these in the output - make them no-ops.
731  void save_override(const boost::archive::object_id_type & t, int) {}
732  void save_override(const boost::archive::object_reference_type & t, int) {}
733  void save_override(const boost::archive::version_type & t, int) {}
734  void save_override(const boost::archive::class_id_type & t, int) {}
735  void save_override(const boost::archive::class_id_optional_type & t, int) {}
736  void save_override(const boost::archive::class_id_reference_type & t, int){}
737  void save_override(const boost::archive::class_name_type & t, int) {}
738  void save_override(const boost::archive::tracking_type & t, int) {}
739 
740 
741 public:
742  log_archive(std::ostream & os, unsigned int flags = 0) :
743  boost::archive::xml_oarchive_impl<log_archive>(
744  os,
745  flags | boost::archive::no_header
746  )
747  {}
748 };
749 
750 //typedef boost::archive::detail::polymorphic_oarchive_route<
751 //boost::archive::xml_oarchive_impl<log_archive>
752 //> polymorphic_log_archive;
753 
754 
755 
756 
757 } // Archive
758 
759 
760 
761 } // uLib
762 
763 
765 ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::xml_oarchive)
766 ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::text_iarchive)
767 ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::text_oarchive)
768 ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::hrt_iarchive)
769 ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::hrt_oarchive)
770 ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::log_archive)
771 
772 //ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::polymorphic_xml_iarchive)
773 //ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::polymorphic_xml_oarchive)
774 //ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::polymorphic_text_iarchive)
775 //ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::polymorphic_text_oarchive)
776 //ULIB_SERIALIZATION_REGISTER_ARCHIVE(uLib::Archive::polymorphic_log_archive)
777 
778 
779 
780 
781 #endif // U_CORE_ARCHIVES_H
void save_override(const boost::archive::version_type &t, int)
Definition: Archives.h:733
log_archive(std::ostream &os, unsigned int flags=0)
Definition: Archives.h:742
void save_override(const boost::archive::object_id_type &t, int)
Definition: Archives.h:731
void save_override(T &t, BOOST_PFTO int)
Definition: Archives.h:710
void save_override(const boost::archive::class_name_type &t, int)
Definition: Archives.h:737
Definition: Archives.h:691
void save_override(const boost::archive::class_id_type &t, int)
Definition: Archives.h:734
#define ULIB_SERIALIZATION_REGISTER_ARCHIVE(_Archive)
Definition: Archives.h:123
void save_override(const boost::archive::object_reference_type &t, int)
Definition: Archives.h:732
void save_override(const boost::archive::tracking_type &t, int)
Definition: Archives.h:738
void save_override(const boost::archive::class_id_reference_type &t, int)
Definition: Archives.h:736
Definition: Archives.h:399
void save_override(const boost::archive::class_id_optional_type &t, int)
Definition: Archives.h:735
void save_override(const boost::serialization::nvp< T > &t, int)
Definition: Archives.h:723
void save_override(const char *str, int v)
Definition: Archives.h:704