retdec
lzma_data.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_UNPACKER_DECOMPRESSION_LZMA_LZMA_DATA_H
8 #define RETDEC_UNPACKER_DECOMPRESSION_LZMA_LZMA_DATA_H
9 
11 
12 namespace retdec {
13 namespace unpacker {
14 
21 {
22  RangeDecoder() : code(0), range(0), decoder() {}
23 
24  void reset()
25  {
26  code = 0;
27  range = 0;
28  decoder.clear();
29  }
30 
31  uint32_t code;
32  uint32_t range;
33  std::vector<uint16_t> decoder;
34 };
35 
42 class LzmaData : public CompressedData
43 {
44 public:
45  LzmaData() = delete;
46  LzmaData(const DynamicBuffer& buffer, uint8_t pb, uint8_t lp, uint8_t lc);
47  LzmaData(const LzmaData& data) = delete;
48 
49  virtual bool decompress(DynamicBuffer& outputBuffer) override;
50 
51 private:
53 
54  bool checkProperties();
55  bool decodeBit(uint32_t pos, uint32_t& bit);
56  bool decodeLiteral(uint32_t pos, uint8_t& returnByte, bool useRep, uint32_t rep);
57  void rotateRep(uint32_t rep[4], uint32_t amount);
58  bool decodeLen(uint32_t pos, uint32_t posState, uint32_t& len);
59  bool decodeBitTree(uint32_t pos, uint32_t rep, uint32_t add, uint32_t& ret);
60  bool decodeDirectBits(uint32_t count, uint32_t initValue, uint32_t& ret);
61  bool decodeRevBitTree(uint32_t pos, uint32_t rep, uint32_t& posSlot);
62 
63  uint32_t _readPos;
64  uint8_t _pb, _lp, _lc;
66 };
67 
68 } // namespace unpacker
69 } // namespace retdec
70 
71 #endif
Abstract class for compressed data.
Definition: compressed_data.h:26
LZMA compressed data.
Definition: lzma_data.h:43
bool decodeBit(uint32_t pos, uint32_t &bit)
Definition: lzma_data.cpp:234
bool decodeRevBitTree(uint32_t pos, uint32_t rep, uint32_t &posSlot)
Definition: lzma_data.cpp:369
bool decodeLiteral(uint32_t pos, uint8_t &returnByte, bool useRep, uint32_t rep)
Definition: lzma_data.cpp:264
bool decodeLen(uint32_t pos, uint32_t posState, uint32_t &len)
Definition: lzma_data.cpp:314
bool decodeDirectBits(uint32_t count, uint32_t initValue, uint32_t &ret)
Definition: lzma_data.cpp:389
uint32_t _readPos
The position of reading from the input buffer.
Definition: lzma_data.h:63
LzmaData & operator=(const LzmaData &)
bool checkProperties()
Definition: lzma_data.cpp:415
RangeDecoder _rangeDecoder
Range decoder.
Definition: lzma_data.h:65
LzmaData(const LzmaData &data)=delete
bool decodeBitTree(uint32_t pos, uint32_t rep, uint32_t add, uint32_t &ret)
Definition: lzma_data.cpp:351
uint8_t _lp
Definition: lzma_data.h:64
uint8_t _pb
Definition: lzma_data.h:64
void rotateRep(uint32_t rep[4], uint32_t amount)
Definition: lzma_data.cpp:305
uint8_t _lc
Parameters of LZMA compression.
Definition: lzma_data.h:64
virtual bool decompress(DynamicBuffer &outputBuffer) override
Definition: lzma_data.cpp:34
The class for dynamic buffered data manipulation taking the endianness of the data in account.
Definition: dynamic_buffer.h:36
Declaration of class for abstract compressed data.
Definition: archive_wrapper.h:19
Supportive functionality for the generic unpacker.
Range decoder for LZMA.
Definition: lzma_data.h:21
void reset()
Definition: lzma_data.h:24
std::vector< uint16_t > decoder
Decoding buffer.
Definition: lzma_data.h:33
uint32_t range
Definition: lzma_data.h:32
uint32_t code
Definition: lzma_data.h:31
RangeDecoder()
Definition: lzma_data.h:22