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

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __febird_io_ZlibStream_h__
  3. #define __febird_io_ZlibStream_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. #endif
  7. #include "../stdtypes.h"
  8. #include "../refcount.h"
  9. #include "IOException.h"
  10. #include "IStream.h"
  11. namespace febird {
  12. class FEBIRD_DLL_EXPORT ZlibStreamBase : public RefCounter
  13. {
  14. protected:
  15. void* m_fp;
  16. void ThrowOpenFileException(const char* fpath, const char* mode);
  17. public:
  18. ZlibStreamBase() : m_fp(0) {}
  19. virtual ~ZlibStreamBase();
  20. bool isOpen() const { return 0 != m_fp; }
  21. void open(const char* fpath, const char* mode);
  22. bool xopen(const char* fpath, const char* mode);
  23. void dopen(int fd, const char* mode);
  24. void close();
  25. };
  26. class FEBIRD_DLL_EXPORT ZlibInputStream : public IInputStream, public ZlibStreamBase
  27. {
  28. DECLARE_NONE_COPYABLE_CLASS(ZlibInputStream)
  29. public:
  30. explicit ZlibInputStream(const char* fpath, const char* mode = "rb");
  31. explicit ZlibInputStream(int fd, const char* mode = "rb");
  32. ZlibInputStream() throw() {} // 不是我打开的文件,请显式 attach/detach
  33. bool eof() const;
  34. void ensureRead(void* vbuf, size_t length);
  35. size_t read(void* buf, size_t size) throw();
  36. };
  37. class FEBIRD_DLL_EXPORT ZlibOutputStream : public IOutputStream, public ZlibStreamBase
  38. {
  39. DECLARE_NONE_COPYABLE_CLASS(ZlibOutputStream)
  40. public:
  41. explicit ZlibOutputStream(const char* fpath, const char* mode = "wb");
  42. explicit ZlibOutputStream(int fd, const char* mode = "wb");
  43. ZlibOutputStream() throw() {} // 不是我打开的文件,请显式 attach/detach
  44. void ensureWrite(const void* vbuf, size_t length);
  45. size_t write(const void* buf, size_t size) throw();
  46. void flush();
  47. };
  48. } // namespace febird
  49. #endif