hash_tables.c revision 145683
1145683Sharti/* 2145683Sharti * DO NOT EDIT 3145683Sharti * $FreeBSD: head/usr.bin/make/hash_tables.c 145683 2005-04-29 15:15:28Z harti $ 4145683Sharti * auto-generated from FreeBSD: src/usr.bin/make/parse.c,v 1.99 2005/04/29 14:37:44 harti Exp 5145683Sharti * DO NOT EDIT 6145683Sharti */ 7145683Sharti#include <sys/types.h> 8145683Sharti 9145683Sharti#include "hash_tables.h" 10145683Sharti 11145683Sharti/* 12145683Sharti * d=2 13145683Sharti * n=38 14145683Sharti * m=18 15145683Sharti * c=2.09 16145683Sharti * maxlen=1 17145683Sharti * minklen=2 18145683Sharti * maxklen=9 19145683Sharti * minchar=97 20145683Sharti * maxchar=119 21145683Sharti * loop=0 22145683Sharti * numiter=2 23145683Sharti * seed= 24145683Sharti */ 25145683Sharti 26145683Shartistatic const signed char directive_g[] = { 27145683Sharti 16, 0, -1, 14, 5, 2, 2, -1, 0, 0, 28145683Sharti -1, -1, 16, 11, -1, 15, -1, 14, 7, -1, 29145683Sharti 8, 6, 1, -1, -1, 0, 4, 6, -1, 0, 30145683Sharti 0, 2, 0, 13, -1, 14, -1, 0, 31145683Sharti}; 32145683Sharti 33145683Shartistatic const u_char directive_T0[] = { 34145683Sharti 11, 25, 14, 30, 14, 26, 23, 15, 9, 37, 35145683Sharti 27, 32, 27, 1, 17, 27, 35, 13, 8, 22, 36145683Sharti 8, 28, 7, 37145683Sharti}; 38145683Sharti 39145683Shartistatic const u_char directive_T1[] = { 40145683Sharti 19, 20, 31, 17, 29, 2, 7, 12, 1, 31, 41145683Sharti 11, 18, 11, 20, 10, 2, 15, 19, 4, 10, 42145683Sharti 13, 36, 3, 43145683Sharti}; 44145683Sharti 45145683Sharti 46145683Shartiint 47145683Shartidirective_hash(const u_char *key, size_t len) 48145683Sharti{ 49145683Sharti unsigned f0, f1; 50145683Sharti const u_char *kp = key; 51145683Sharti 52145683Sharti if (len < 2 || len > 9) 53145683Sharti return -1; 54145683Sharti 55145683Sharti for (f0=f1=0; kp < key + len; ++kp) { 56145683Sharti if (*kp < 97 || *kp > 119) 57145683Sharti return -1; 58145683Sharti f0 += directive_T0[-97 + *kp]; 59145683Sharti f1 += directive_T1[-97 + *kp]; 60145683Sharti } 61145683Sharti 62145683Sharti f0 %= 38; 63145683Sharti f1 %= 38; 64145683Sharti 65145683Sharti return (directive_g[f0] + directive_g[f1]) % 18; 66145683Sharti} 67145683Sharti/* 68145683Sharti * d=2 69145683Sharti * n=69 70145683Sharti * m=33 71145683Sharti * c=2.09 72145683Sharti * maxlen=1 73145683Sharti * minklen=4 74145683Sharti * maxklen=12 75145683Sharti * minchar=46 76145683Sharti * maxchar=95 77145683Sharti * loop=0 78145683Sharti * numiter=8 79145683Sharti * seed= 80145683Sharti */ 81145683Sharti 82145683Shartistatic const signed char keyword_g[] = { 83145683Sharti -1, 17, 16, 0, -1, -1, -1, -1, 25, 18, 84145683Sharti 2, -1, -1, 27, 28, 1, 0, 15, 16, -1, 85145683Sharti -1, 14, 19, 1, -1, 13, -1, 0, 1, -1, 86145683Sharti 11, 15, 0, 8, 14, 18, 31, -1, -1, 22, 87145683Sharti -1, 27, -1, 0, -1, 9, -1, -1, -1, 21, 88145683Sharti 3, 25, 0, 0, 0, -1, -1, 6, 0, 19, 89145683Sharti -1, -1, -1, 23, -1, 17, -1, 0, 0, 90145683Sharti}; 91145683Sharti 92145683Shartistatic const u_char keyword_T0[] = { 93145683Sharti 8, 30, 55, 61, 14, 13, 48, 1, 18, 12, 94145683Sharti 0, 52, 1, 40, 44, 52, 33, 58, 29, 29, 95145683Sharti 3, 30, 26, 42, 1, 49, 10, 26, 5, 45, 96145683Sharti 65, 13, 6, 22, 45, 61, 7, 25, 62, 65, 97145683Sharti 8, 34, 48, 50, 5, 63, 33, 38, 52, 33, 98145683Sharti}; 99145683Sharti 100145683Shartistatic const u_char keyword_T1[] = { 101145683Sharti 44, 18, 49, 61, 56, 13, 1, 54, 1, 47, 102145683Sharti 46, 17, 22, 36, 25, 66, 14, 36, 58, 51, 103145683Sharti 60, 22, 61, 19, 43, 37, 5, 18, 50, 58, 104145683Sharti 32, 65, 47, 12, 28, 34, 65, 29, 59, 67, 105145683Sharti 48, 36, 15, 41, 44, 11, 39, 29, 18, 68, 106145683Sharti}; 107145683Sharti 108145683Sharti 109145683Shartiint 110145683Shartikeyword_hash(const u_char *key, size_t len) 111145683Sharti{ 112145683Sharti unsigned f0, f1; 113145683Sharti const u_char *kp = key; 114145683Sharti 115145683Sharti if (len < 4 || len > 12) 116145683Sharti return -1; 117145683Sharti 118145683Sharti for (f0=f1=0; *kp; ++kp) { 119145683Sharti if (*kp < 46 || *kp > 95) 120145683Sharti return -1; 121145683Sharti f0 += keyword_T0[-46 + *kp]; 122145683Sharti f1 += keyword_T1[-46 + *kp]; 123145683Sharti } 124145683Sharti 125145683Sharti f0 %= 69; 126145683Sharti f1 %= 69; 127145683Sharti 128145683Sharti return (keyword_g[f0] + keyword_g[f1]) % 33; 129145683Sharti} 130