1*7c568831SAndroid Build Coastguard Worker #ifndef XML_DICT_H_PRIVATE__ 2*7c568831SAndroid Build Coastguard Worker #define XML_DICT_H_PRIVATE__ 3*7c568831SAndroid Build Coastguard Worker 4*7c568831SAndroid Build Coastguard Worker #include <libxml/dict.h> 5*7c568831SAndroid Build Coastguard Worker 6*7c568831SAndroid Build Coastguard Worker /* 7*7c568831SAndroid Build Coastguard Worker * Values are ANDed with 0xFFFFFFFF to support platforms where 8*7c568831SAndroid Build Coastguard Worker * unsigned is larger than 32 bits. With 32-bit unsigned values, 9*7c568831SAndroid Build Coastguard Worker * modern compilers should optimize the operation away. 10*7c568831SAndroid Build Coastguard Worker */ 11*7c568831SAndroid Build Coastguard Worker 12*7c568831SAndroid Build Coastguard Worker #define HASH_ROL(x,n) ((x) << (n) | ((x) & 0xFFFFFFFF) >> (32 - (n))) 13*7c568831SAndroid Build Coastguard Worker #define HASH_ROR(x,n) (((x) & 0xFFFFFFFF) >> (n) | (x) << (32 - (n))) 14*7c568831SAndroid Build Coastguard Worker 15*7c568831SAndroid Build Coastguard Worker /* 16*7c568831SAndroid Build Coastguard Worker * GoodOAAT: One of a smallest non-multiplicative One-At-a-Time functions 17*7c568831SAndroid Build Coastguard Worker * that passes SMHasher. 18*7c568831SAndroid Build Coastguard Worker * 19*7c568831SAndroid Build Coastguard Worker * Author: Sokolov Yura aka funny-falcon 20*7c568831SAndroid Build Coastguard Worker */ 21*7c568831SAndroid Build Coastguard Worker 22*7c568831SAndroid Build Coastguard Worker #define HASH_INIT(h1, h2, seed) \ 23*7c568831SAndroid Build Coastguard Worker do { \ 24*7c568831SAndroid Build Coastguard Worker h1 = seed ^ 0x3b00; \ 25*7c568831SAndroid Build Coastguard Worker h2 = HASH_ROL(seed, 15); \ 26*7c568831SAndroid Build Coastguard Worker } while (0) 27*7c568831SAndroid Build Coastguard Worker 28*7c568831SAndroid Build Coastguard Worker #define HASH_UPDATE(h1, h2, ch) \ 29*7c568831SAndroid Build Coastguard Worker do { \ 30*7c568831SAndroid Build Coastguard Worker h1 += ch; \ 31*7c568831SAndroid Build Coastguard Worker h1 += h1 << 3; \ 32*7c568831SAndroid Build Coastguard Worker h2 += h1; \ 33*7c568831SAndroid Build Coastguard Worker h2 = HASH_ROL(h2, 7); \ 34*7c568831SAndroid Build Coastguard Worker h2 += h2 << 2; \ 35*7c568831SAndroid Build Coastguard Worker } while (0) 36*7c568831SAndroid Build Coastguard Worker 37*7c568831SAndroid Build Coastguard Worker /* Result is in h2 */ 38*7c568831SAndroid Build Coastguard Worker #define HASH_FINISH(h1, h2) \ 39*7c568831SAndroid Build Coastguard Worker do { \ 40*7c568831SAndroid Build Coastguard Worker h1 ^= h2; \ 41*7c568831SAndroid Build Coastguard Worker h1 += HASH_ROL(h2, 14); \ 42*7c568831SAndroid Build Coastguard Worker h2 ^= h1; h2 += HASH_ROR(h1, 6); \ 43*7c568831SAndroid Build Coastguard Worker h1 ^= h2; h1 += HASH_ROL(h2, 5); \ 44*7c568831SAndroid Build Coastguard Worker h2 ^= h1; h2 += HASH_ROR(h1, 8); \ 45*7c568831SAndroid Build Coastguard Worker h2 &= 0xFFFFFFFF; \ 46*7c568831SAndroid Build Coastguard Worker } while (0) 47*7c568831SAndroid Build Coastguard Worker 48*7c568831SAndroid Build Coastguard Worker typedef struct { 49*7c568831SAndroid Build Coastguard Worker unsigned hashValue; 50*7c568831SAndroid Build Coastguard Worker const xmlChar *name; 51*7c568831SAndroid Build Coastguard Worker } xmlHashedString; 52*7c568831SAndroid Build Coastguard Worker 53*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void 54*7c568831SAndroid Build Coastguard Worker xmlInitDictInternal(void); 55*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void 56*7c568831SAndroid Build Coastguard Worker xmlCleanupDictInternal(void); 57*7c568831SAndroid Build Coastguard Worker 58*7c568831SAndroid Build Coastguard Worker XML_HIDDEN unsigned 59*7c568831SAndroid Build Coastguard Worker xmlDictComputeHash(const xmlDict *dict, const xmlChar *string); 60*7c568831SAndroid Build Coastguard Worker XML_HIDDEN unsigned 61*7c568831SAndroid Build Coastguard Worker xmlDictCombineHash(unsigned v1, unsigned v2); 62*7c568831SAndroid Build Coastguard Worker XML_HIDDEN xmlHashedString 63*7c568831SAndroid Build Coastguard Worker xmlDictLookupHashed(xmlDictPtr dict, const xmlChar *name, int len); 64*7c568831SAndroid Build Coastguard Worker 65*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void 66*7c568831SAndroid Build Coastguard Worker xmlInitRandom(void); 67*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void 68*7c568831SAndroid Build Coastguard Worker xmlCleanupRandom(void); 69*7c568831SAndroid Build Coastguard Worker XML_HIDDEN unsigned 70*7c568831SAndroid Build Coastguard Worker xmlGlobalRandom(void); 71*7c568831SAndroid Build Coastguard Worker XML_HIDDEN unsigned 72*7c568831SAndroid Build Coastguard Worker xmlRandom(void); 73*7c568831SAndroid Build Coastguard Worker 74*7c568831SAndroid Build Coastguard Worker #endif /* XML_DICT_H_PRIVATE__ */ 75