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

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __febird_io_byte_io_impl_h__
  3. #define __febird_io_byte_io_impl_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. #endif
  7. // #include "IOException.h"
  8. // #include "sstream"
  9. #define BYTE_IO_EMPTY
  10. #define FEBIRD_GEN_ensureRead(prefix)  
  11. void prefix ensureRead(void* vbuf, size_t length) 
  12. size_t n = this->read(vbuf, length); 
  13. if (n != length) 
  14. std::ostringstream oss; 
  15. oss << """ << BOOST_CURRENT_FUNCTION << """ 
  16. << ", ReadBytes[want=" << length << ", read=" << n << "]"; 
  17. throw EndOfFileException(oss.str().c_str()); 
  18. }
  19. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  20. #define FEBIRD_GEN_ensureWrite(prefix)  
  21. void prefix ensureWrite(const void* vbuf, size_t length) 
  22. size_t n = this->write(vbuf, length); 
  23. if (n != length) 
  24. std::ostringstream oss; 
  25. oss << """ << BOOST_CURRENT_FUNCTION << """ 
  26. << ", WriteBytes[want=" << length << ", written=" << n << "]"; 
  27. throw OutOfSpaceException(oss.str().c_str()); 
  28. }
  29. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  30. #define FEBIRD_GEN_getByte(prefix) 
  31. int prefix getByte() 
  32. unsigned char b; 
  33. if (this->read(&b, 1) == 0) 
  34. return -1; 
  35. return b; 
  36. }
  37. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  38. #define FEBIRD_GEN_readByte(prefix) 
  39. unsigned char prefix readByte() 
  40. unsigned char b; 
  41. if (this->read(&b, 1) == 0) 
  42. throw EndOfFileException(BOOST_CURRENT_FUNCTION); 
  43. return b; 
  44. }
  45. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  46. #define FEBIRD_GEN_writeByte(prefix) 
  47. void prefix writeByte(unsigned char b) 
  48. if (this->write(&b, 1) == 0) 
  49. throw OutOfSpaceException(BOOST_CURRENT_FUNCTION); 
  50. }
  51. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  52. /*
  53. namespace febird {
  54. template<class Stream>
  55. class InputStream_Method_Impl
  56. {
  57. public:
  58. unsigned char readByte()
  59. {
  60. unsigned char b;
  61. if (static_cast<Stream&>(*this).read(&b, 1) == 0)
  62. throw EndOfFileException(BOOST_CURRENT_FUNCTION);
  63. return b;
  64. }
  65. void ensureRead(void* vbuf, size_t length)
  66. {
  67. size_t n = static_cast<Stream&>(*this).read(vbuf, length);
  68. if (n != length)
  69. {
  70. std::ostringstream oss;
  71. oss << """ << BOOST_CURRENT_FUNCTION << """
  72. << ", ReadBytes[want=" << length << ", read=" << n << "]";
  73. throw EndOfFileException(oss.str().c_str());
  74. }
  75. }
  76. };
  77. template<class Stream>
  78. class OutputStream_Method_Impl
  79. {
  80. public:
  81. void writeByte(unsigned char b)
  82. {
  83. if (static_cast<Stream&>(*this).write(&b, 1) == 0)
  84. throw OutOfSpaceException(BOOST_CURRENT_FUNCTION);
  85. }
  86. void ensureWrite(const void* vbuf, size_t length)
  87. {
  88. size_t n = static_cast<Stream&>(*this).write(vbuf, length);
  89. if (n != length)
  90. {
  91. std::ostringstream oss;
  92. oss << """ << BOOST_CURRENT_FUNCTION << """
  93. << ", WriteBytes[want=" << length << ", written=" << n << "]";
  94. throw OutOfSpaceException(oss.str().c_str());
  95. }
  96. }
  97. };
  98. template<class Stream>
  99. class ByteIoImplement :
  100.     public  InputStream_Method_Impl<Stream>,
  101.     public OutputStream_Method_Impl<Stream>
  102. {
  103. public:
  104. };
  105. } // namespace febird
  106. */
  107. #endif