1c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/****************************************************************************** 29aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik 39aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikgif_hash.h - magfic constants and declarations for GIF LZW 49aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik 5c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/ 6c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 7c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#ifndef _GIF_HASH_H_ 8c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define _GIF_HASH_H_ 9c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 10c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#include <unistd.h> 119aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#include <stdint.h> 12c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 13c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_SIZE 8192 /* 12bits = 4096 or twice as big! */ 14c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_KEY_MASK 0x1FFF /* 13bits keys */ 15c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_KEY_NUM_BITS 13 /* 13bits keys */ 16c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_MAX_KEY 8191 /* 13bits - 1, maximal code possible */ 17c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_MAX_CODE 4095 /* Biggest code possible in 12 bits. */ 18c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 19c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/* The 32 bits of the long are divided into two parts for the key & code: */ 20c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/* 1. The code is 12 bits as our compression algorithm is limited to 12bits */ 21c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/* 2. The key is 12 bits Prefix code + 8 bit new char or 20 bits. */ 22c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/* The key is the upper 20 bits. The code is the lower 12. */ 23c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_GET_KEY(l) (l >> 12) 24c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_GET_CODE(l) (l & 0x0FFF) 25c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_PUT_KEY(l) (l << 12) 26c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define HT_PUT_CODE(l) (l & 0x0FFF) 27c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 28c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef struct GifHashTableType { 299aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik uint32_t HTable[HT_SIZE]; 30c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project} GifHashTableType; 31c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 32c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source ProjectGifHashTableType *_InitHashTable(void); 33c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projectvoid _ClearHashTable(GifHashTableType *HashTable); 349aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikvoid _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code); 359aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key); 36c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project 37c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#endif /* _GIF_HASH_H_ */ 389aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik 399aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* end */ 40