hash_tables.c revision 145971
1145683Sharti/* 2145683Sharti * DO NOT EDIT 3145683Sharti * $FreeBSD: head/usr.bin/make/hash_tables.c 145971 2005-05-06 18:30:06Z harti $ 4145971Sharti * auto-generated from FreeBSD: src/usr.bin/make/parse.c,v 1.100 2005/04/29 15:15:28 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 69145971Sharti * n=72 70145971Sharti * m=34 71145683Sharti * c=2.09 72145683Sharti * maxlen=1 73145683Sharti * minklen=4 74145683Sharti * maxklen=12 75145683Sharti * minchar=46 76145683Sharti * maxchar=95 77145683Sharti * loop=0 78145971Sharti * numiter=4 79145683Sharti * seed= 80145683Sharti */ 81145683Sharti 82145683Shartistatic const signed char keyword_g[] = { 83145971Sharti 8, 15, -1, 25, 22, 20, -1, 33, 16, -1, 84145971Sharti 21, 31, 0, 0, 0, 29, 30, 8, -1, 0, 85145971Sharti -1, 21, -1, 0, -1, -1, -1, -1, -1, 4, 86145971Sharti -1, -1, 25, 28, -1, 27, 11, 23, 0, 0, 87145971Sharti 24, -1, -1, 0, 3, 0, -1, 24, 0, 0, 88145971Sharti -1, 28, 12, -1, 20, 13, -1, 5, -1, 1, 89145971Sharti 0, 0, -1, 0, 10, 19, 13, 9, -1, 2, 90145971Sharti -1, -1, 91145683Sharti}; 92145683Sharti 93145683Shartistatic const u_char keyword_T0[] = { 94145971Sharti 32, 10, 54, 61, 2, 35, 62, 50, 52, 53, 95145971Sharti 70, 7, 62, 18, 24, 30, 31, 66, 10, 61, 96145971Sharti 52, 71, 56, 56, 28, 6, 33, 67, 12, 41, 97145971Sharti 39, 45, 51, 21, 34, 53, 56, 40, 47, 52, 98145971Sharti 21, 61, 60, 12, 7, 28, 42, 38, 38, 52, 99145683Sharti}; 100145683Sharti 101145683Shartistatic const u_char keyword_T1[] = { 102145971Sharti 0, 39, 65, 48, 13, 62, 46, 42, 5, 50, 103145971Sharti 69, 69, 69, 43, 2, 46, 12, 6, 11, 9, 104145971Sharti 24, 10, 25, 64, 68, 13, 57, 55, 17, 33, 105145971Sharti 1, 18, 0, 67, 10, 14, 57, 56, 0, 6, 106145971Sharti 50, 13, 3, 47, 56, 22, 37, 13, 28, 48, 107145683Sharti}; 108145683Sharti 109145683Sharti 110145683Shartiint 111145683Shartikeyword_hash(const u_char *key, size_t len) 112145683Sharti{ 113145683Sharti unsigned f0, f1; 114145683Sharti const u_char *kp = key; 115145683Sharti 116145683Sharti if (len < 4 || len > 12) 117145683Sharti return -1; 118145683Sharti 119145683Sharti for (f0=f1=0; *kp; ++kp) { 120145683Sharti if (*kp < 46 || *kp > 95) 121145683Sharti return -1; 122145683Sharti f0 += keyword_T0[-46 + *kp]; 123145683Sharti f1 += keyword_T1[-46 + *kp]; 124145683Sharti } 125145683Sharti 126145971Sharti f0 %= 72; 127145971Sharti f1 %= 72; 128145683Sharti 129145971Sharti return (keyword_g[f0] + keyword_g[f1]) % 34; 130145683Sharti} 131