PocketLzma  1.0.0
A cross-platform singleheader LZMA compression/decompression library for C++11
Settings.hpp
Go to the documentation of this file.
1 //
2 // Created by robin on 29.12.2020.
3 //
4 
5 #ifndef POCKETLZMA_SETTINGS_HPP
6 #define POCKETLZMA_SETTINGS_HPP
7 
8 namespace plz
9 {
10  class Settings
11  {
12  public:
13 
14  Settings() = default;
15  inline explicit Settings(Preset preset);
19  inline void validate();
20 
21  inline void usePreset(Preset preset);
22 
41  uint8_t level {5};
42 
53  uint32_t dictionarySize {1 << 24};
54 
60  uint8_t literalContextBits {3};
61 
69  uint8_t literalPositionBits {0};
70 
76  uint8_t positionBits {2};
77 
84  uint16_t fastBytes {32};
85  };
86 
88  {
89  usePreset(preset);
90  }
91 
93  {
94  if(level > PLZ_MAX_LEVEL)
96 
101 
104 
107 
110 
113  else if(fastBytes > PLZ_MAX_FAST_BYTES)
115 
116  }
117 
119  {
120  switch(preset)
121  {
122  case Preset::Default:
123  level = 5;
124  dictionarySize = 1 << 24;
125  literalContextBits = 3;
127  positionBits = 2;
128  fastBytes = 32;
129  break;
130 
131  case Preset::Fastest:
132  level = 1;
133  dictionarySize = 1 << 16;
134  literalContextBits = 4;
136  positionBits = 2;
137  fastBytes = 8;
138  break;
139 
140  case Preset::Fast:
141  level = 4;
142  dictionarySize = 1 << 22;
143  literalContextBits = 4;
145  positionBits = 2;
146  fastBytes = 16;
147  break;
148 
149  case Preset::GoodCompression:
150  level = 7;
151  dictionarySize = 1 << 26;
152  literalContextBits = 3;
154  positionBits = 2;
155  fastBytes = 64;
156  break;
157 
159  level = 9;
160  dictionarySize = 1 << 27;
161  literalContextBits = 3;
163  positionBits = 2;
164  fastBytes = 128;
165  break;
166 
167 
168 
169  }
170  }
171 
172 }
173 
174 #endif //POCKETLZMA_SETTINGS_HPP
plz::Settings
Definition: Settings.hpp:11
plz::Settings::dictionarySize
uint32_t dictionarySize
Definition: Settings.hpp:53
plz::Preset
Preset
Definition: pocketlzma_common.hpp:56
plz::PLZ_MAX_LEVEL
const uint8_t PLZ_MAX_LEVEL
Definition: pocketlzma_common.hpp:17
plz::PLZ_MAX_LITERAL_CONTEXT_BITS
const uint8_t PLZ_MAX_LITERAL_CONTEXT_BITS
Definition: pocketlzma_common.hpp:20
plz::Settings::level
uint8_t level
Definition: Settings.hpp:41
plz::PLZ_MIN_FAST_BYTES
const uint16_t PLZ_MIN_FAST_BYTES
Definition: pocketlzma_common.hpp:23
plz::Settings::usePreset
void usePreset(Preset preset)
Definition: Settings.hpp:118
plz::Settings::literalPositionBits
uint8_t literalPositionBits
Definition: Settings.hpp:69
plz::Settings::literalContextBits
uint8_t literalContextBits
Definition: Settings.hpp:60
plz::Settings::positionBits
uint8_t positionBits
Definition: Settings.hpp:76
plz::PLZ_MAX_LITERAL_POSITION_BITS
const uint8_t PLZ_MAX_LITERAL_POSITION_BITS
Definition: pocketlzma_common.hpp:21
plz::PLZ_MAX_DICTIONARY_SIZE
const uint32_t PLZ_MAX_DICTIONARY_SIZE
Definition: pocketlzma_common.hpp:19
plz::Settings::validate
void validate()
Definition: Settings.hpp:92
plz::Preset::Default
@ Default
plz::PLZ_MAX_POSITION_BITS
const uint8_t PLZ_MAX_POSITION_BITS
Definition: pocketlzma_common.hpp:22
plz::Settings::Settings
Settings()=default
plz::PLZ_MAX_FAST_BYTES
const uint16_t PLZ_MAX_FAST_BYTES
Definition: pocketlzma_common.hpp:24
plz::Settings::fastBytes
uint16_t fastBytes
Definition: Settings.hpp:84
plz::PLZ_MIN_DICTIONARY_SIZE
const uint32_t PLZ_MIN_DICTIONARY_SIZE
Definition: pocketlzma_common.hpp:18
plz
Definition: File.hpp:11