DataIO_Tuple.h
上传用户:kx_jwh
上传日期:2021-09-03
资源大小:76k
文件大小:3k
源码类别:

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __febird_io_DataIO_Tuple_h__
  3. #define __febird_io_DataIO_Tuple_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. #endif
  7. #include <boost/tuple/tuple.hpp>
  8. #include <boost/type_traits.hpp>
  9. #include <boost/static_assert.hpp>
  10. namespace febird {
  11. //////////////////////////////////////////////////////////////////////////
  12. //! boost::tuple io
  13. template <class DataIO, 
  14.   class T0, class T1, class T2, class T3, class T4,
  15.           class T5, class T6, class T7, class T8, class T9>
  16. inline void DataIO_loadObject(DataIO& dio, boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& t)
  17. {
  18. typedef typename boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::inherited cons_t;
  19. DataIO_loadObject(dio, static_cast<cons_t&>(t));
  20. }
  21. template<class DataIO, class T1>
  22. inline void DataIO_loadObject(DataIO& dio, boost::tuples::cons<T1, boost::tuples::null_type>& t)
  23. {
  24.   dio >> t.head;
  25. }
  26. template<class DataIO, class T1>
  27. inline void DataIO_loadObject(DataIO& dio, boost::tuples::null_type&)
  28. { }
  29. template<class DataIO, class T1, class T2>
  30. inline void DataIO_loadObject(DataIO& dio, boost::tuples::cons<T1, T2>& t)
  31. {
  32.   dio >> t.head;
  33. #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  34.   if (boost::tuples::length<T2>::value == 0)
  35.     return dio;
  36. #endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  37.   
  38.   DataIO_loadObject(dio, t.tail);
  39. }
  40. //---------------------------------------------------------------------------------------------------
  41. template <class DataIO, 
  42.   class T0, class T1, class T2, class T3, class T4,
  43.           class T5, class T6, class T7, class T8, class T9>
  44. inline void DataIO_saveObject(DataIO& dio, const boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& t)
  45. {
  46. typedef typename boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::inherited cons_t;
  47. DataIO_saveObject(dio, static_cast<const cons_t&>(t));
  48. }
  49. template<class DataIO, class T1>
  50. inline void DataIO_saveObject(DataIO& dio, const boost::tuples::cons<T1, boost::tuples::null_type>& t)
  51. {
  52.   dio << t.head;
  53. }
  54. template<class DataIO, class T1>
  55. inline void DataIO_saveObject(DataIO& dio, const boost::tuples::null_type&)
  56. {  }
  57. template<class DataIO, class T1, class T2>
  58. inline void DataIO_saveObject(DataIO& dio, const boost::tuples::cons<T1, T2>& t)
  59. {
  60.   dio << t.head;
  61. #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
  62.   if (boost::tuples::length<T2>::value == 0)
  63.     return;
  64. #endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
  65.   
  66.   DataIO_saveObject(dio, t.tail);
  67. }
  68. } // namespace febird
  69. #endif // __febird_io_DataIO_Tuple_h__