NONEDecompressor.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /* Copyright (C) Teemu Suutari */
  2. #include <cstring>
  3. #include "NONEDecompressor.hpp"
  4. #include "common/Common.hpp"
  5. namespace ancient::internal
  6. {
  7. bool NONEDecompressor::detectHeaderXPK(uint32_t hdr) noexcept
  8. {
  9. return hdr==FourCC("NONE");
  10. }
  11. std::shared_ptr<XPKDecompressor> NONEDecompressor::create(uint32_t hdr,uint32_t recursionLevel,const Buffer &packedData,std::shared_ptr<XPKDecompressor::State> &state,bool verify)
  12. {
  13. return std::make_shared<NONEDecompressor>(hdr,recursionLevel,packedData,state,verify);
  14. }
  15. NONEDecompressor::NONEDecompressor(uint32_t hdr,uint32_t recursionLevel,const Buffer &packedData,std::shared_ptr<XPKDecompressor::State> &state,bool verify) :
  16. XPKDecompressor(recursionLevel),
  17. _packedData(packedData)
  18. {
  19. if (!detectHeaderXPK(hdr)) throw Decompressor::InvalidFormatError();
  20. }
  21. NONEDecompressor::~NONEDecompressor()
  22. {
  23. // nothing needed
  24. }
  25. const std::string &NONEDecompressor::getSubName() const noexcept
  26. {
  27. static std::string name="XPK-NONE: Null compressor";
  28. return name;
  29. }
  30. void NONEDecompressor::decompressImpl(Buffer &rawData,const Buffer &previousData,bool verify)
  31. {
  32. if (rawData.size()!=_packedData.size()) throw Decompressor::DecompressionError();
  33. std::memcpy(rawData.data(),_packedData.data(),_packedData.size());
  34. }
  35. }