mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
98 lines
3.1 KiB
C
98 lines
3.1 KiB
C
/* chunkhash.h -- a perfect hash code for the chunk names in png.h
|
|
*
|
|
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
|
|
*
|
|
* THIS IS A MACHINE GENERATED FILE. See contrib/tools/chunkhash.c for
|
|
* copyright and other information.
|
|
*
|
|
* USAGE: To include the PNG_CHUNK_HASH macro and associated definitions:
|
|
*
|
|
* #define PNG_CHUNKHASH_DEFS
|
|
* #include "contrib/tools/chunkhash.h"
|
|
*
|
|
* To define the png_chunk_hash array used by the macro:
|
|
*
|
|
* #define PNG_CHUNKHASH_CODE
|
|
* #include "contrib/tools/chunkhash.h"
|
|
*
|
|
* One or both of the defines must be given except when building chunkhash
|
|
* itself.
|
|
*/
|
|
#ifdef PNG_CHUNKHASH_DEFS
|
|
#ifndef PNG_CHUNKHASH_H
|
|
#define PNG_CHUNKHASH_H
|
|
/* A perfect hash code - returns a value 0..(PNG_KNOWN_CHUNK_COUNT-1) and is
|
|
* generated by the ridiculously simple program in contrib/tools/chunkhash.c
|
|
*
|
|
* The hash code used here multiplies each byte by a different constant to
|
|
* return a single number:
|
|
*
|
|
* b0 * c[0] + b1 * [c1] + b2 * c[2] + b3 * c[3]
|
|
*
|
|
* The values of the constants are found by search using the a table of
|
|
* primes, including 0, and may be (in fact are at present) 0 for some of the
|
|
* bytes, the compiler is expected to optimize multiply by zero, or one!
|
|
*
|
|
* The lookup table reduces the sparse result of the hash calculation to the
|
|
* correct index values. The chunks are indexed in the string order of the
|
|
* png_uint_32 chunk names.
|
|
*/
|
|
#define PNG_CHUNK_HASH_MASK 0x3fU
|
|
#define PNG_CHUNK_HASH_C0 103
|
|
#define PNG_CHUNK_HASH_C1 1
|
|
#define PNG_CHUNK_HASH_C2 0
|
|
#define PNG_CHUNK_HASH_C3 1
|
|
|
|
#define PNG_CHUNK_IDAT_TAG 0
|
|
#define PNG_CHUNK_IEND_TAG 1
|
|
#define PNG_CHUNK_IHDR_TAG 2
|
|
#define PNG_CHUNK_PLTE_TAG 3
|
|
#define PNG_CHUNK_bKGD_TAG 4
|
|
#define PNG_CHUNK_cHRM_TAG 5
|
|
#define PNG_CHUNK_fRAc_TAG 6
|
|
#define PNG_CHUNK_gAMA_TAG 7
|
|
#define PNG_CHUNK_gIFg_TAG 8
|
|
#define PNG_CHUNK_gIFt_TAG 9
|
|
#define PNG_CHUNK_gIFx_TAG 10
|
|
#define PNG_CHUNK_hIST_TAG 11
|
|
#define PNG_CHUNK_iCCP_TAG 12
|
|
#define PNG_CHUNK_iTXt_TAG 13
|
|
#define PNG_CHUNK_oFFs_TAG 14
|
|
#define PNG_CHUNK_pCAL_TAG 15
|
|
#define PNG_CHUNK_pHYs_TAG 16
|
|
#define PNG_CHUNK_sBIT_TAG 17
|
|
#define PNG_CHUNK_sCAL_TAG 18
|
|
#define PNG_CHUNK_sPLT_TAG 19
|
|
#define PNG_CHUNK_sRGB_TAG 20
|
|
#define PNG_CHUNK_sTER_TAG 21
|
|
#define PNG_CHUNK_tEXt_TAG 22
|
|
#define PNG_CHUNK_tIME_TAG 23
|
|
#define PNG_CHUNK_tRNS_TAG 24
|
|
#define PNG_CHUNK_zTXt_TAG 25
|
|
|
|
#define PNG_KNOWN_CHUNK_COUNT 26
|
|
|
|
extern const png_byte png_chunk_hash[PNG_CHUNK_HASH_MASK+1];
|
|
#endif /* !PNG_CHUNKHASH_H */
|
|
#endif /* PNG_CHUNKHASH_DEFS */
|
|
|
|
#ifndef PNG_CHUNK_HASH
|
|
#define PNG_CHUNK_HASH(chunk) (png_chunk_hash[PNG_CHUNK_HASH_MASK & (\
|
|
((chunk) >> 24) * PNG_CHUNK_HASH_C0 +\
|
|
((chunk) >> 16) * PNG_CHUNK_HASH_C1 +\
|
|
((chunk) >> 8) * PNG_CHUNK_HASH_C2 +\
|
|
((chunk) ) * PNG_CHUNK_HASH_C3)])
|
|
#endif
|
|
|
|
#ifdef PNG_CHUNKHASH_CODE
|
|
#ifndef PNG_CHUNKHASH_C
|
|
#define PNG_CHUNKHASH_C
|
|
const png_byte png_chunk_hash[PNG_CHUNK_HASH_MASK+1] = {
|
|
26, 3, 26, 26, 26, 26, 26, 13, 26, 26, 26, 16, 26, 26, 26, 26,
|
|
26, 24, 12, 26, 18, 26, 26, 26, 26, 20, 26, 17, 26, 26, 25, 15,
|
|
26, 8, 14, 26, 26, 22, 26, 26, 1, 19, 5, 21, 26, 26, 9, 26,
|
|
26, 26, 10, 7, 26, 11, 26, 0, 26, 2, 23, 26, 26, 4, 26, 6
|
|
};
|
|
#endif /* !PNG_CHUNKHASH_C */
|
|
#endif /* PNG_CHUNKHASH_CODE */
|