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

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __febird_io_IStream_h__
  3. #define __febird_io_IStream_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. #endif
  7. #include <boost/mpl/bool.hpp>
  8. #include "../stdtypes.h"
  9. namespace febird {
  10. class FEBIRD_DLL_EXPORT ISeekable
  11. {
  12. public:
  13. typedef boost::mpl::true_ is_seekable;
  14. virtual ~ISeekable() {}
  15. virtual void seek(stream_position_t position);
  16. virtual void seek(stream_offset_t offset, int origin) = 0;
  17. virtual stream_position_t tell() = 0;
  18. virtual stream_position_t size();
  19. };
  20. class FEBIRD_DLL_EXPORT IInputStream
  21. {
  22. public:
  23. typedef boost::mpl::false_ is_seekable;
  24. virtual ~IInputStream() {}
  25. virtual size_t read(void* vbuf, size_t length) = 0;
  26. /**
  27.  @brief End Of File
  28.   
  29.   only InputStream has eof() mark, OutputStream does not have eof()
  30.  */
  31. virtual bool eof() const = 0;
  32. };
  33. class FEBIRD_DLL_EXPORT IOutputStream
  34. {
  35. public:
  36. typedef boost::mpl::false_ is_seekable;
  37. virtual ~IOutputStream() {}
  38. virtual size_t write(const void* vbuf, size_t length) = 0;
  39. virtual void flush() = 0;
  40. };
  41. class FEBIRD_DLL_EXPORT IDuplexStream : public IInputStream, public IOutputStream
  42. {
  43. public: typedef boost::mpl::false_ is_seekable;
  44. };
  45. class FEBIRD_DLL_EXPORT ISeekableInputStream : public ISeekable, public IInputStream
  46. {
  47. public: typedef boost::mpl::true_ is_seekable;
  48. };
  49. class FEBIRD_DLL_EXPORT ISeekableOutputStream : public ISeekable, public IOutputStream
  50. {
  51. public: typedef boost::mpl::true_ is_seekable;
  52. };
  53. class FEBIRD_DLL_EXPORT ISeekableStream : public ISeekable, public IInputStream, public IOutputStream
  54. {
  55. public: typedef boost::mpl::true_ is_seekable;
  56. };
  57. class FEBIRD_DLL_EXPORT IAcceptor
  58. {
  59. public:
  60. virtual ~IAcceptor();
  61. virtual IDuplexStream* accept() = 0;
  62. };
  63. } // namespace febird
  64. #endif