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