1*324bb76bSAndroid Build Coastguard Worker /****************************************************************************** 2*324bb76bSAndroid Build Coastguard Worker 3*324bb76bSAndroid Build Coastguard Worker gif_hash.h - magfic constants and declarations for GIF LZW 4*324bb76bSAndroid Build Coastguard Worker 5*324bb76bSAndroid Build Coastguard Worker SPDX-License-Identifier: MIT 6*324bb76bSAndroid Build Coastguard Worker 7*324bb76bSAndroid Build Coastguard Worker ******************************************************************************/ 8*324bb76bSAndroid Build Coastguard Worker 9*324bb76bSAndroid Build Coastguard Worker #ifndef _GIF_HASH_H_ 10*324bb76bSAndroid Build Coastguard Worker #define _GIF_HASH_H_ 11*324bb76bSAndroid Build Coastguard Worker 12*324bb76bSAndroid Build Coastguard Worker #ifndef _WIN32 13*324bb76bSAndroid Build Coastguard Worker #include <unistd.h> 14*324bb76bSAndroid Build Coastguard Worker #endif /* _WIN32 */ 15*324bb76bSAndroid Build Coastguard Worker #include <stdint.h> 16*324bb76bSAndroid Build Coastguard Worker 17*324bb76bSAndroid Build Coastguard Worker #define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */ 18*324bb76bSAndroid Build Coastguard Worker #define HT_KEY_MASK 0x1FFF /* 13bits keys */ 19*324bb76bSAndroid Build Coastguard Worker #define HT_KEY_NUM_BITS 13 /* 13bits keys */ 20*324bb76bSAndroid Build Coastguard Worker #define HT_MAX_KEY 8191 /* 13bits - 1, maximal code possible */ 21*324bb76bSAndroid Build Coastguard Worker #define HT_MAX_CODE 4095 /* Biggest code possible in 12 bits. */ 22*324bb76bSAndroid Build Coastguard Worker 23*324bb76bSAndroid Build Coastguard Worker /* The 32 bits of the long are divided into two parts for the key & code: */ 24*324bb76bSAndroid Build Coastguard Worker /* 1. The code is 12 bits as our compression algorithm is limited to 12bits */ 25*324bb76bSAndroid Build Coastguard Worker /* 2. The key is 12 bits Prefix code + 8 bit new char or 20 bits. */ 26*324bb76bSAndroid Build Coastguard Worker /* The key is the upper 20 bits. The code is the lower 12. */ 27*324bb76bSAndroid Build Coastguard Worker #define HT_GET_KEY(l) (l >> 12) 28*324bb76bSAndroid Build Coastguard Worker #define HT_GET_CODE(l) (l & 0x0FFF) 29*324bb76bSAndroid Build Coastguard Worker #define HT_PUT_KEY(l) (l << 12) 30*324bb76bSAndroid Build Coastguard Worker #define HT_PUT_CODE(l) (l & 0x0FFF) 31*324bb76bSAndroid Build Coastguard Worker 32*324bb76bSAndroid Build Coastguard Worker typedef struct GifHashTableType { 33*324bb76bSAndroid Build Coastguard Worker uint32_t HTable[HT_SIZE]; 34*324bb76bSAndroid Build Coastguard Worker } GifHashTableType; 35*324bb76bSAndroid Build Coastguard Worker 36*324bb76bSAndroid Build Coastguard Worker GifHashTableType *_InitHashTable(void); 37*324bb76bSAndroid Build Coastguard Worker void _ClearHashTable(GifHashTableType *HashTable); 38*324bb76bSAndroid Build Coastguard Worker void _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code); 39*324bb76bSAndroid Build Coastguard Worker int _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key); 40*324bb76bSAndroid Build Coastguard Worker 41*324bb76bSAndroid Build Coastguard Worker #endif /* _GIF_HASH_H_ */ 42*324bb76bSAndroid Build Coastguard Worker 43*324bb76bSAndroid Build Coastguard Worker /* end */ 44