7zHandler.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // 7z/Handler.h
  2. #ifndef __7Z_HANDLER_H
  3. #define __7Z_HANDLER_H
  4. #include "../../ICoder.h"
  5. #include "../IArchive.h"
  6. #include "7zIn.h"
  7. #include "7zCompressionMode.h"
  8. #include "../../Common/CreateCoder.h"
  9. #ifndef EXTRACT_ONLY
  10. #include "../Common/HandlerOut.h"
  11. #endif
  12. namespace NArchive {
  13. namespace N7z {
  14. #ifdef _7Z_VOL
  15. struct CRef
  16. {
  17. int VolumeIndex;
  18. int ItemIndex;
  19. };
  20. struct CVolume
  21. {
  22. int StartRef2Index;
  23. CMyComPtr<IInStream> Stream;
  24. CArchiveDatabaseEx Database;
  25. };
  26. #endif
  27. #ifndef __7Z_SET_PROPERTIES
  28. #ifdef EXTRACT_ONLY
  29. #ifdef COMPRESS_MT
  30. #define __7Z_SET_PROPERTIES
  31. #endif
  32. #else
  33. #define __7Z_SET_PROPERTIES
  34. #endif
  35. #endif
  36. class CHandler:
  37. #ifndef EXTRACT_ONLY
  38. public NArchive::COutHandler,
  39. #endif
  40. public IInArchive,
  41. #ifdef _7Z_VOL
  42. public IInArchiveGetStream,
  43. #endif
  44. #ifdef __7Z_SET_PROPERTIES
  45. public ISetProperties,
  46. #endif
  47. #ifndef EXTRACT_ONLY
  48. public IOutArchive,
  49. #endif
  50. PUBLIC_ISetCompressCodecsInfo
  51. public CMyUnknownImp
  52. {
  53. public:
  54. MY_QUERYINTERFACE_BEGIN2(IInArchive)
  55. #ifdef _7Z_VOL
  56. MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream)
  57. #endif
  58. #ifdef __7Z_SET_PROPERTIES
  59. MY_QUERYINTERFACE_ENTRY(ISetProperties)
  60. #endif
  61. #ifndef EXTRACT_ONLY
  62. MY_QUERYINTERFACE_ENTRY(IOutArchive)
  63. #endif
  64. QUERY_ENTRY_ISetCompressCodecsInfo
  65. MY_QUERYINTERFACE_END
  66. MY_ADDREF_RELEASE
  67. INTERFACE_IInArchive(;)
  68. #ifdef _7Z_VOL
  69. STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
  70. #endif
  71. #ifdef __7Z_SET_PROPERTIES
  72. STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties);
  73. #endif
  74. #ifndef EXTRACT_ONLY
  75. INTERFACE_IOutArchive(;)
  76. #endif
  77. DECL_ISetCompressCodecsInfo
  78. CHandler();
  79. private:
  80. #ifdef _7Z_VOL
  81. CObjectVector<CVolume> _volumes;
  82. CObjectVector<CRef> _refs;
  83. #else
  84. CMyComPtr<IInStream> _inStream;
  85. NArchive::N7z::CArchiveDatabaseEx _database;
  86. #endif
  87. #ifdef EXTRACT_ONLY
  88. #ifdef COMPRESS_MT
  89. UInt32 _numThreads;
  90. #endif
  91. UInt32 _crcSize;
  92. #else
  93. CRecordVector<CBind> _binds;
  94. HRESULT SetPassword(CCompressionMethodMode &methodMode, IArchiveUpdateCallback *updateCallback);
  95. HRESULT SetCompressionMethod(CCompressionMethodMode &method,
  96. CObjectVector<COneMethodInfo> &methodsInfo
  97. #ifdef COMPRESS_MT
  98. , UInt32 numThreads
  99. #endif
  100. );
  101. HRESULT SetCompressionMethod(
  102. CCompressionMethodMode &method,
  103. CCompressionMethodMode &headerMethod);
  104. #endif
  105. bool IsEncrypted(UInt32 index2) const;
  106. #ifndef _SFX
  107. CRecordVector<UInt64> _fileInfoPopIDs;
  108. void FillPopIDs();
  109. #endif
  110. };
  111. }}
  112. #endif