BZIP2Decompressor.hpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /* Copyright (C) Teemu Suutari */
  2. #ifndef BZIP2DECOMPRESSOR_HPP
  3. #define BZIP2DECOMPRESSOR_HPP
  4. #include "Decompressor.hpp"
  5. #include "XPKDecompressor.hpp"
  6. namespace ancient::internal
  7. {
  8. class BZIP2Decompressor : public Decompressor, public XPKDecompressor
  9. {
  10. public:
  11. BZIP2Decompressor(const Buffer &packedData,bool exactSizeKnown,bool verify);
  12. BZIP2Decompressor(uint32_t hdr,uint32_t recursionLevel,const Buffer &packedData,std::shared_ptr<XPKDecompressor::State> &state,bool verify);
  13. virtual ~BZIP2Decompressor();
  14. virtual size_t getRawSize() const noexcept override final;
  15. virtual size_t getPackedSize() const noexcept override final;
  16. virtual const std::string &getName() const noexcept override final;
  17. virtual const std::string &getSubName() const noexcept override final;
  18. virtual void decompressImpl(Buffer &rawData,bool verify) override final;
  19. virtual void decompressImpl(Buffer &rawData,const Buffer &previousData,bool verify) override final;
  20. static bool detectHeader(uint32_t hdr) noexcept;
  21. static bool detectHeaderXPK(uint32_t hdr) noexcept;
  22. static std::shared_ptr<Decompressor> create(const Buffer &packedData,bool exactSizeKnown,bool verify);
  23. static std::shared_ptr<XPKDecompressor> create(uint32_t hdr,uint32_t recursionLevel,const Buffer &packedData,std::shared_ptr<XPKDecompressor::State> &state,bool verify);
  24. private:
  25. const Buffer &_packedData;
  26. size_t _blockSize=0;
  27. size_t _packedSize=0;
  28. size_t _rawSize=0;
  29. };
  30. }
  31. #endif