StreamObjects.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // StreamObjects.h
  2. #ifndef __STREAMOBJECTS_H
  3. #define __STREAMOBJECTS_H
  4. #include "../../Common/DynamicBuffer.h"
  5. #include "../../Common/MyCom.h"
  6. #include "../IStream.h"
  7. class CSequentialInStreamImp:
  8. public ISequentialInStream,
  9. public CMyUnknownImp
  10. {
  11. const Byte *_dataPointer;
  12. size_t _size;
  13. size_t _pos;
  14. public:
  15. void Init(const Byte *dataPointer, size_t size)
  16. {
  17. _dataPointer = dataPointer;
  18. _size = size;
  19. _pos = 0;
  20. }
  21. MY_UNKNOWN_IMP
  22. STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
  23. };
  24. class CWriteBuffer
  25. {
  26. CByteDynamicBuffer _buffer;
  27. size_t _size;
  28. public:
  29. CWriteBuffer(): _size(0) {}
  30. void Init() { _size = 0; }
  31. void Write(const void *data, size_t size);
  32. size_t GetSize() const { return _size; }
  33. const CByteDynamicBuffer& GetBuffer() const { return _buffer; }
  34. };
  35. class CSequentialOutStreamImp:
  36. public ISequentialOutStream,
  37. public CMyUnknownImp
  38. {
  39. CWriteBuffer _writeBuffer;
  40. public:
  41. void Init() { _writeBuffer.Init(); }
  42. size_t GetSize() const { return _writeBuffer.GetSize(); }
  43. const CByteDynamicBuffer& GetBuffer() const { return _writeBuffer.GetBuffer(); }
  44. MY_UNKNOWN_IMP
  45. STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
  46. };
  47. class CSequentialOutStreamImp2:
  48. public ISequentialOutStream,
  49. public CMyUnknownImp
  50. {
  51. Byte *_buffer;
  52. size_t _size;
  53. size_t _pos;
  54. public:
  55. void Init(Byte *buffer, size_t size)
  56. {
  57. _buffer = buffer;
  58. _pos = 0;
  59. _size = size;
  60. }
  61. size_t GetPos() const { return _pos; }
  62. MY_UNKNOWN_IMP
  63. STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
  64. };
  65. class CSequentialInStreamSizeCount:
  66. public ISequentialInStream,
  67. public CMyUnknownImp
  68. {
  69. CMyComPtr<ISequentialInStream> _stream;
  70. UInt64 _size;
  71. public:
  72. void Init(ISequentialInStream *stream)
  73. {
  74. _stream = stream;
  75. _size = 0;
  76. }
  77. UInt64 GetSize() const { return _size; }
  78. MY_UNKNOWN_IMP
  79. STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
  80. };
  81. class CSequentialOutStreamSizeCount:
  82. public ISequentialOutStream,
  83. public CMyUnknownImp
  84. {
  85. CMyComPtr<ISequentialOutStream> _stream;
  86. UInt64 _size;
  87. public:
  88. void SetStream(ISequentialOutStream *stream) { _stream = stream; }
  89. void Init() { _size = 0; }
  90. UInt64 GetSize() const { return _size; }
  91. MY_UNKNOWN_IMP
  92. STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
  93. };
  94. #endif