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

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __febird_io_DataIO_Dump_h__
  3. #define __febird_io_DataIO_Dump_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. #endif
  7. namespace febird {
  8. //! called by dump_load_from_file/dump_save_to_file...
  9. #define DATA_IO_DUMP_LOAD_SAVE(Class)
  10. template<class Input>
  11. friend void DataIO_dump_load_object(Input& in, Class& x)
  12. {
  13. x.dump_load(in);
  14. }
  15. template<class Output>
  16. friend void DataIO_dump_save_object(Output& out, const Class& x)
  17. {
  18. x.dump_save(out);
  19. }
  20. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  21. //! @{
  22. //! default dump_load/dump_save
  23. //! 
  24. //! @note
  25. //!   if dump_load/dump_save is not public member,
  26. //!   please use DATA_IO_DUMP_LOAD_SAVE
  27. template<class Input, class Class>
  28. void DataIO_dump_load_object(Input& in, Class& x)
  29. {
  30. x.dump_load(in);
  31. }
  32. template<class Output, class Class>
  33. void DataIO_dump_save_object(Output& out, const Class& x)
  34. {
  35. x.dump_save(out);
  36. }
  37. //@}
  38. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. template<class DataIO, class T, class Alloc>
  40. void DataIO_dump_load_object(DataIO& dio, std::vector<T, Alloc>& vec)
  41. {
  42. uint32_t size;
  43. dio >> size;
  44. vec.resize(size);
  45. dio.ensureRead(&*vec.begin(), sizeof(T)*size);
  46. }
  47. template<class DataIO, class T, class Alloc>
  48. void DataIO_dump_save_object(DataIO& dio, const std::vector<T, Alloc>& vec)
  49. {
  50. uint32_t size = vec.size();
  51. dio << size;
  52. dio.ensureWrite(&*vec.begin(), sizeof(T)*size);
  53. }
  54. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  55. //! 
  56. #define DATA_IO_SMART_PTR_DUMP_LOAD_SAVE(SmartPtrTemplate)
  57. template<class T, class DataIO>
  58. void DataIO_dump_load_object(DataIO& dio, SmartPtrTemplate<T>& x)
  59. {
  60. x.reset(new T);
  61. dio >> *x;
  62. }
  63. template<class T, class DataIO>
  64. void DataIO_dump_save_object(DataIO& dio, const SmartPtrTemplate<T>& x)
  65. {
  66. dio << *x;
  67. }
  68. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  69. DATA_IO_SMART_PTR_DUMP_LOAD_SAVE(std::auto_ptr)
  70. DATA_IO_SMART_PTR_DUMP_LOAD_SAVE(boost::intrusive_ptr)
  71. DATA_IO_SMART_PTR_DUMP_LOAD_SAVE(boost::scoped_ptr)
  72. DATA_IO_SMART_PTR_DUMP_LOAD_SAVE(boost::shared_ptr)
  73. } // namespace febird
  74. #endif // __febird_io_DataIO_Dump_h__