SHRIDecompressor.hpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* Copyright (C) Teemu Suutari */
  2. #ifndef SHRIDECOMPRESSOR_HPP
  3. #define SHRIDECOMPRESSOR_HPP
  4. #include "XPKDecompressor.hpp"
  5. namespace ancient::internal
  6. {
  7. class SHRIDecompressor : public XPKDecompressor
  8. {
  9. private:
  10. class SHRIState : public XPKDecompressor::State
  11. {
  12. public:
  13. SHRIState() noexcept;
  14. virtual ~SHRIState();
  15. uint32_t vlen=0;
  16. uint32_t vnext=0;
  17. uint32_t shift=0;
  18. uint32_t ar[999];
  19. };
  20. public:
  21. SHRIDecompressor(uint32_t hdr,uint32_t recursionLevel,const Buffer &packedData,std::shared_ptr<XPKDecompressor::State> &state,bool verify);
  22. virtual ~SHRIDecompressor();
  23. virtual const std::string &getSubName() const noexcept override final;
  24. virtual void decompressImpl(Buffer &rawData,const Buffer &previousData,bool verify) override final;
  25. static bool detectHeaderXPK(uint32_t hdr) noexcept;
  26. static std::shared_ptr<XPKDecompressor> create(uint32_t hdr,uint32_t recursionLevel,const Buffer &packedData,std::shared_ptr<XPKDecompressor::State> &state,bool verify);
  27. private:
  28. const Buffer &_packedData;
  29. uint32_t _ver=0;
  30. size_t _startOffset=0;
  31. size_t _rawSize=0;
  32. std::shared_ptr<XPKDecompressor::State> &_state; // reference!!!
  33. };
  34. }
  35. #endif