Tileson  1.3.0
A helpful json parser for Tiled maps
Lzma.hpp
Go to the documentation of this file.
1 //
2 // Created by robin on 16.01.2021.
3 //
4 //#include "../../extras/pocketlzma.hpp"
5 #ifdef POCKETLZMA_POCKETLZMA_H
6 
7 #ifndef TILESON_LZMA_HPP
8 #define TILESON_LZMA_HPP
9 
10 namespace tson
11 {
12  class Lzma : public IDecompressor<std::vector<uint8_t>, std::vector<uint8_t>>
13  {
14  public:
15  inline const std::string &name() const override
16  {
17  return NAME;
18  }
19 
20  inline std::vector<uint8_t> decompress(const std::vector<uint8_t> &input) override
21  {
22  std::vector<uint8_t> out;
23 
24  plz::PocketLzma p;
25  plz::StatusCode status = p.decompress(input, out);
26 
27  if(status != plz::StatusCode::Ok)
28  return std::vector<uint8_t>();
29 
30  return out;
31  }
32 
33  inline std::vector<uint8_t> decompressFile(const fs::path &path) override
34  {
35  std::vector<uint8_t> in;
36  std::vector<uint8_t> out;
37 
38  plz::PocketLzma p;
39  plz::FileStatus fileStatus = plz::File::FromFile(path.u8string(), in);
40  if(fileStatus.status() != plz::FileStatus::Code::Ok)
41  return std::vector<uint8_t>();
42 
43  plz::StatusCode status = p.decompress(in, out);
44 
45  if(status != plz::StatusCode::Ok)
46  return std::vector<uint8_t>();
47 
48  return out;
49  }
50 
51  inline std::vector<uint8_t> decompress(const void *data, size_t size) override
52  {
53  std::vector<uint8_t> out;
54 
55  plz::PocketLzma p;
56  plz::StatusCode status = p.decompress((uint8_t*) data, size, out);
57 
58  if(status != plz::StatusCode::Ok)
59  return std::vector<uint8_t>();
60 
61  return out;
62  }
63 
64  private:
65  inline static const std::string NAME {"lzma"};
66  };
67 }
68 
69 #endif //TILESON_LZMA_HPP
70 
71 #endif
Definition: Base64.hpp:12