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

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. // for convenient using...
  3. //////////////////////////////////////////////////////////////////////////
  4. // optional param:
  5. //   FEBIRD_DATA_IO_LS_EX_T_PARAM
  6. //   FEBIRD_DATA_IO_LS_EX_PARAM
  7. #ifndef FEBIRD_DATA_IO_LS_EX_T_PARAM
  8. #define FEBIRD_DATA_IO_LS_EX_T_PARAM
  9. #endif
  10. #ifndef FEBIRD_DATA_IO_LS_EX_PARAM
  11. #define FEBIRD_DATA_IO_LS_EX_PARAM
  12. #endif
  13. #ifdef FEBIRD_LOAD_FUNCTION_NAME
  14. // parameter for this file
  15. //   FEBIRD_LOAD_FUNCTION_NAME
  16. //   FEBIRD_DATA_INPUT_CLASS
  17. //   FEBIRD_DATA_INPUT_LOAD_FROM(input, x)
  18. template<class Object FEBIRD_DATA_IO_LS_EX_T_PARAM>
  19. bool FEBIRD_LOAD_FUNCTION_NAME(Object& x FEBIRD_DATA_IO_LS_EX_PARAM,
  20.    const std::string& szFile,
  21.    bool fileMustExist=true,
  22.    bool printLog=true)
  23. {
  24. //  std::auto_ptr<StatisticTime> pst;
  25. //  if (printLog)
  26. //  {
  27. //  std::ostringstream oss;
  28. //  oss << BOOST_STRINGIZE(FEBIRD_LOAD_FUNCTION_NAME) << ": "" << szFile << """;
  29. //  pst.reset(new StatisticTime(oss.str(), std::cout));
  30. //  }
  31. FileStream file;
  32. file.open(szFile.c_str(), "rb");
  33. if (file.isOpen()) {
  34. #ifdef FEBIRD_LOAD_SAVE_CONVENIENT_USE_STREAM_BUFFER
  35. setvbuf(file, 0, _IONBF, 0);
  36. SeekableStreamWrapper<FileStream*> fileWrapper(&file);
  37. SeekableInputBuffer sbuf(16*1024);
  38. sbuf.attach(&fileWrapper);
  39. FEBIRD_DATA_INPUT_CLASS<SeekableInputBuffer> input(&sbuf);
  40. #else
  41. FEBIRD_DATA_INPUT_CLASS<FileStream*> input(&file);
  42. #endif
  43. FEBIRD_DATA_INPUT_LOAD_FROM(input, x);
  44. }
  45. else
  46. {
  47. if (fileMustExist)
  48. FileStream::ThrowOpenFileException(szFile.c_str(), "rb");
  49. else {
  50. OpenFileException exp(szFile.c_str(), "mode=rb");
  51. if (printLog)
  52. printf("open file failed: %sn", exp.what());
  53. return false;
  54. }
  55. }
  56. return true;
  57. }
  58. template<class Object FEBIRD_DATA_IO_LS_EX_T_PARAM>
  59. void FEBIRD_LOAD_FUNCTION_NAME(Object& x FEBIRD_DATA_IO_LS_EX_PARAM,
  60.    FileStream& file,
  61.    const std::string& szTitle,
  62.    bool printLog=true)
  63. {
  64. //  std::auto_ptr<StatisticTime> pst;
  65. //  if (printLog)
  66. //  {
  67. //  std::ostringstream oss;
  68. //  oss << BOOST_STRINGIZE(FEBIRD_LOAD_FUNCTION_NAME) << ", title: "" << szTitle << """;
  69. //  pst.reset(new StatisticTime(oss.str(), std::cout));
  70. //  }
  71. #ifdef FEBIRD_LOAD_SAVE_CONVENIENT_USE_STREAM_BUFFER
  72. // setvbuf(file, 0, _IONBF, 0);
  73. SeekableStreamWrapper<FileStream*> fileWrapper(&file);
  74. SeekableInputBuffer sbuf(16*1024);
  75. sbuf.attach(&fileWrapper);
  76. FEBIRD_DATA_INPUT_CLASS<SeekableInputBuffer> input(&sbuf);
  77. #else
  78. FEBIRD_DATA_INPUT_CLASS<FileStream*> input(&file);
  79. #endif
  80. FEBIRD_DATA_INPUT_LOAD_FROM(input, x);
  81. }
  82. template<class Object>
  83. bool FEBIRD_LOAD_FUNCTION_NAME(pass_by_value<Object> x, 
  84.    const std::string& szFile,
  85.    bool fileMustExist=true,
  86.    bool printLog=true)
  87. {
  88. return FEBIRD_LOAD_FUNCTION_NAME(x.get(), szFile, fileMustExist, printLog);
  89. }
  90. template<class Object>
  91. void FEBIRD_LOAD_FUNCTION_NAME(pass_by_value<Object> x,
  92.    FileStream& file,
  93.    const std::string& szTitle,
  94.    bool printLog=true)
  95. {
  96. FEBIRD_LOAD_FUNCTION_NAME(x.get(), file, szTitle, printLog);
  97. }
  98. #endif // FEBIRD_LOAD_FUNCTION_NAME
  99. //////////////////////////////////////////////////////////////////////////
  100. #ifdef FEBIRD_SAVE_FUNCTION_NAME
  101. // parameter for this file
  102. //   FEBIRD_SAVE_FUNCTION_NAME
  103. //   FEBIRD_DATA_OUTPUT_CLASS
  104. //   FEBIRD_DATA_OUTPUT_SAVE_TO(output, x)
  105. template<class Object FEBIRD_DATA_IO_LS_EX_T_PARAM>
  106. void FEBIRD_SAVE_FUNCTION_NAME(const Object& x FEBIRD_DATA_IO_LS_EX_PARAM,
  107.    const std::string& szFile,
  108.    bool printLog=true)
  109. {
  110. //  std::auto_ptr<StatisticTime> pst;
  111. //  if (printLog)
  112. //  {
  113. //  std::ostringstream oss;
  114. //  oss << BOOST_STRINGIZE(FEBIRD_SAVE_FUNCTION_NAME) << ": "" << szFile << """;
  115. //  pst.reset(new StatisticTime(oss.str(), std::cout));
  116. //  }
  117. #ifdef FEBIRD_SAVE_FILE_OPEN_MODE
  118. const char* openMode = FEBIRD_SAVE_FILE_OPEN_MODE;
  119. #undef FEBIRD_SAVE_FILE_OPEN_MODE
  120. #else
  121. const char* openMode = "wb";
  122. #endif
  123. FileStream file(szFile.c_str(), openMode);
  124. #ifdef FEBIRD_LOAD_SAVE_CONVENIENT_USE_STREAM_BUFFER
  125. setvbuf(file, 0, _IONBF, 0);
  126. SeekableStreamWrapper<FileStream*> fileWrapper(&file);
  127. SeekableOutputBuffer sbuf(16*1024);
  128. sbuf.attach(&fileWrapper);
  129. FEBIRD_DATA_OUTPUT_CLASS<SeekableOutputBuffer> output(&sbuf);
  130. #else
  131. FEBIRD_DATA_OUTPUT_CLASS<FileStream*> output(&file);
  132. #endif
  133. FEBIRD_DATA_OUTPUT_SAVE_TO(output, x);
  134. }
  135. template<class Object FEBIRD_DATA_IO_LS_EX_T_PARAM>
  136. void FEBIRD_SAVE_FUNCTION_NAME(const Object& x FEBIRD_DATA_IO_LS_EX_PARAM,
  137.    FileStream& file,
  138.    const std::string& szTitle,
  139.    bool printLog=true)
  140. {
  141. //  std::auto_ptr<StatisticTime> pst;
  142. //  if (printLog)
  143. //  {
  144. //  std::ostringstream oss;
  145. //  oss << BOOST_STRINGIZE(FEBIRD_SAVE_FUNCTION_NAME) << ", title: "" << szTitle << """;
  146. //  pst.reset(new StatisticTime(oss.str(), std::cout));
  147. //  }
  148. #ifdef FEBIRD_LOAD_SAVE_CONVENIENT_USE_STREAM_BUFFER
  149. // setvbuf(file, 0, _IONBF, 0);
  150. SeekableStreamWrapper<FileStream*> fileWrapper(&file);
  151. SeekableOutputBuffer sbuf(16*1024);
  152. sbuf.attach(&fileWrapper);
  153. FEBIRD_DATA_OUTPUT_CLASS<SeekableOutputBuffer*> output(&sbuf);
  154. #else
  155. FEBIRD_DATA_OUTPUT_CLASS<FileStream*> output(&file);
  156. #endif
  157. FEBIRD_DATA_OUTPUT_SAVE_TO(output, x);
  158. }
  159. #endif // FEBIRD_SAVE_FUNCTION_NAME
  160. #undef FEBIRD_DATA_IO_LS_EX_T_PARAM
  161. #undef FEBIRD_DATA_IO_LS_EX_PARAM
  162. #undef FEBIRD_LOAD_FUNCTION_NAME
  163. #undef FEBIRD_SAVE_FUNCTION_NAME
  164. #undef FEBIRD_DATA_INPUT_CLASS
  165. #undef FEBIRD_DATA_INPUT_LOAD_FROM
  166. #undef FEBIRD_DATA_OUTPUT_CLASS
  167. #undef FEBIRD_DATA_OUTPUT_SAVE_TO