diff options
Diffstat (limited to '')
-rw-r--r-- | pdlzip.h | 72 |
1 files changed, 48 insertions, 24 deletions
@@ -9,10 +9,22 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ +#ifndef __cplusplus +enum Bool { false = 0, true = 1 }; +typedef enum Bool bool; +#endif + +#ifndef max + #define max(x,y) ((x) >= (y) ? (x) : (y)) +#endif +#ifndef min + #define min(x,y) ((x) <= (y) ? (x) : (y)) +#endif + enum { min_dictionary_bits = 12, min_dictionary_size = 1 << min_dictionary_bits, - max_dictionary_bits = 27, + max_dictionary_bits = 26, max_dictionary_size = 1 << max_dictionary_bits, literal_context_bits = 3, pos_state_bits = 2, @@ -25,20 +37,22 @@ enum { len_high_symbols = 1 << len_high_bits, max_len_symbols = len_low_symbols + len_mid_symbols + len_high_symbols, - min_match_len = 2, // must be 2 - max_match_len = min_match_len + max_len_symbols - 1, // 273 + min_match_len = 2, /* must be 2 */ + max_match_len = min_match_len + max_len_symbols - 1, /* 273 */ min_match_len_limit = 5 }; -typedef uint32_t CRC32[256]; // Table of CRCs of all 8-bit messages. +typedef uint32_t CRC32[256]; /* Table of CRCs of all 8-bit messages. */ extern CRC32 crc32; static inline void CRC32_init() { - for( unsigned int n = 0; n < 256; ++n ) + unsigned int n; + for( n = 0; n < 256; ++n ) { unsigned int c = n; - for( int k = 0; k < 8; ++k ) + int k; + for( k = 0; k < 8; ++k ) { if( c & 1 ) c = 0xEDB88320U ^ ( c >> 1 ); else c >>= 1; } crc32[n] = c; } @@ -49,26 +63,27 @@ static inline void CRC32_update_byte( uint32_t * crc, const uint8_t byte ) static inline void CRC32_update_buf( uint32_t * crc, const uint8_t * const buffer, const int size ) { - for( int i = 0; i < size; ++i ) + int i; + for( i = 0; i < size; ++i ) *crc = crc32[(*crc^buffer[i])&0xFF] ^ ( *crc >> 8 ); } -typedef uint8_t File_header[6]; // 0-3 magic bytes - // 4 version - // 5 coded_dict_size; +static const uint8_t magic_string[4] = { 'L', 'Z', 'I', 'P' }; + +typedef uint8_t File_header[6]; /* 0-3 magic bytes */ + /* 4 version */ + /* 5 coded_dict_size */ enum { Fh_size = 6 }; static inline void Fh_set_magic( File_header header ) { - const uint8_t magic_string[4] = { 'L', 'Z', 'I', 'P' }; memcpy( header, magic_string, 4 ); header[4] = 1; } static inline bool Fh_verify_magic( const File_header header ) { - const uint8_t magic_string[4] = { 'L', 'Z', 'I', 'P' }; return ( memcmp( header, magic_string, 4 ) == 0 ); } @@ -80,8 +95,8 @@ static inline bool Fh_verify_version( const File_header header ) static inline int Fh_real_bits( const int value ) { - int bits = 0; - for( int i = 1, mask = 1; mask > 0; ++i, mask <<= 1 ) + int bits = 0, i, mask; + for( i = 1, mask = 1; mask > 0; ++i, mask <<= 1 ) if( value & mask ) bits = i; return bits; } @@ -103,7 +118,8 @@ static inline bool Fh_set_dictionary_size( File_header header, const int sz ) { const int base_size = 1 << header[5]; const int wedge = base_size / 16; - for( int i = 7; i >= 1; --i ) + int i; + for( i = 7; i >= 1; --i ) if( base_size - ( i * wedge ) >= sz ) { header[5] |= ( i << 5 ); break; } } @@ -114,9 +130,9 @@ static inline bool Fh_set_dictionary_size( File_header header, const int sz ) typedef uint8_t File_trailer[20]; - // 0-3 CRC32 of the uncompressed data - // 4-11 size of the uncompressed data - // 12-19 member size including header and trailer + /* 0-3 CRC32 of the uncompressed data */ + /* 4-11 size of the uncompressed data */ + /* 12-19 member size including header and trailer */ enum { Ft_size = 20 }; @@ -126,35 +142,43 @@ static inline int Ft_versioned_size( const int version ) static inline uint32_t Ft_get_data_crc( const File_trailer trailer ) { uint32_t tmp = 0; - for( int i = 3; i >= 0; --i ) { tmp <<= 8; tmp += trailer[i]; } + int i; + for( i = 3; i >= 0; --i ) { tmp <<= 8; tmp += trailer[i]; } return tmp; } static inline void Ft_set_data_crc( File_trailer trailer, uint32_t crc ) - { for( int i = 0; i <= 3; ++i ) { trailer[i] = (uint8_t)crc; crc >>= 8; } } + { + int i; + for( i = 0; i <= 3; ++i ) { trailer[i] = (uint8_t)crc; crc >>= 8; } + } static inline long long Ft_get_data_size( const File_trailer trailer ) { long long tmp = 0; - for( int i = 11; i >= 4; --i ) { tmp <<= 8; tmp += trailer[i]; } + int i; + for( i = 11; i >= 4; --i ) { tmp <<= 8; tmp += trailer[i]; } return tmp; } static inline void Ft_set_data_size( File_trailer trailer, long long sz ) { - for( int i = 4; i <= 11; ++i ) { trailer[i] = (uint8_t)sz; sz >>= 8; } + int i; + for( i = 4; i <= 11; ++i ) { trailer[i] = (uint8_t)sz; sz >>= 8; } } static inline long long Ft_get_member_size( const File_trailer trailer ) { long long tmp = 0; - for( int i = 19; i >= 12; --i ) { tmp <<= 8; tmp += trailer[i]; } + int i; + for( i = 19; i >= 12; --i ) { tmp <<= 8; tmp += trailer[i]; } return tmp; } static inline void Ft_set_member_size( File_trailer trailer, long long sz ) { - for( int i = 12; i <= 19; ++i ) { trailer[i] = (uint8_t)sz; sz >>= 8; } + int i; + for( i = 12; i <= 19; ++i ) { trailer[i] = (uint8_t)sz; sz >>= 8; } } |