PageRenderTime 16ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/mordor/streams/handle.h

http://github.com/mozy/mordor
C Header | 64 lines | 51 code | 12 blank | 1 comment | 1 complexity | 291947c29b810f0d73001b00d3952210 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. #ifndef __MORDOR_HANDLE_STREAM_H__
  2. #define __MORDOR_HANDLE_STREAM_H__
  3. // Copyright (c) 2009 - Mozy, Inc.
  4. #include <windows.h>
  5. #include "mordor/iomanager.h"
  6. #include "stream.h"
  7. namespace Mordor {
  8. class HandleStream : public Stream
  9. {
  10. public:
  11. typedef boost::shared_ptr<HandleStream> ptr;
  12. protected:
  13. HandleStream();
  14. void init(HANDLE hFile, IOManager *ioManager = NULL,
  15. Scheduler *scheduler = NULL, bool own = true);
  16. public:
  17. HandleStream(HANDLE hFile, IOManager *ioManager = NULL,
  18. Scheduler *scheduler = NULL, bool own = true) :
  19. m_maxOpSize(0xffffffff)
  20. { init(hFile, ioManager, scheduler, own); }
  21. ~HandleStream();
  22. bool supportsRead() { return true; }
  23. bool supportsWrite() { return true; }
  24. bool supportsCancel();
  25. bool supportsSeek() { return GetFileType(m_hFile) == FILE_TYPE_DISK; }
  26. bool supportsSize() { return supportsSeek(); }
  27. bool supportsTruncate() { return supportsSeek(); }
  28. void close(CloseType type = BOTH);
  29. size_t read(void *buffer, size_t length);
  30. void cancelRead();
  31. size_t write(const void *buffer, size_t length);
  32. void cancelWrite();
  33. long long seek(long long offset, Anchor anchor = BEGIN);
  34. long long size();
  35. void truncate(long long size);
  36. void flush(bool flushParent = true);
  37. HANDLE handle() { return m_hFile; }
  38. protected:
  39. IOManager *m_ioManager;
  40. bool m_skipCompletionPortOnSuccess;
  41. Scheduler *m_scheduler;
  42. AsyncEvent m_readEvent;
  43. AsyncEvent m_writeEvent;
  44. long long m_pos;
  45. HANDLE m_hFile;
  46. bool m_own, m_cancelRead, m_cancelWrite;
  47. size_t m_maxOpSize;
  48. };
  49. typedef HandleStream NativeStream;
  50. typedef HANDLE NativeHandle;
  51. }
  52. #endif