#ifndef _RAR_UNPACK_ #define _RAR_UNPACK_ // Maximum allowed number of compressed bits processed in quick mode. #define MAX_QUICK_DECODE_BITS … // Maximum number of filters per entire data block. Must be at least // twice more than MAX_PACK_FILTERS to store filters from two data blocks. #define MAX_UNPACK_FILTERS … // Maximum number of filters per entire data block for RAR3 unpack. // Must be at least twice more than v3_MAX_PACK_FILTERS to store filters // from two data blocks. #define MAX3_UNPACK_FILTERS … // Limit maximum number of channels in RAR3 delta filter to some reasonable // value to prevent too slow processing of corrupt archives with invalid // channels number. Must be equal or larger than v3_MAX_FILTER_CHANNELS. // No need to provide it for RAR5, which uses only 5 bits to store channels. #define MAX3_UNPACK_CHANNELS … // Maximum size of single filter block. We restrict it to limit memory // allocation. Must be equal or larger than MAX_ANALYZE_SIZE. #define MAX_FILTER_BLOCK_SIZE … // Write data in 4 MB or smaller blocks. Must not exceed PACK_MAX_READ, // so we keep the number of buffered filters in unpacker reasonable. #define UNPACK_MAX_WRITE … // Decode compressed bit fields to alphabet numbers. struct DecodeTable:PackDef { … }; struct UnpackBlockHeader { … }; struct UnpackBlockTables { … }; #ifdef RAR_SMP enum UNP_DEC_TYPE { … }; struct UnpackDecodedItem { … }; struct UnpackThreadData { … }; #endif struct UnpackFilter { … }; struct UnpackFilter30 { … }; struct AudioVariables // For RAR 2.0 archives only. { … }; // We can use the fragmented dictionary in case heap does not have the single // large enough memory block. It is slower than normal dictionary. class FragmentedWindow { … }; class Unpack:PackDef { … }; #endif