1/*
2 * DO NOT EDIT
3 * $FreeBSD$
4 * auto-generated from FreeBSD: src/usr.bin/make/parse.c,v 1.114 2008/03/12 14:50:58 obrien Exp
5 * DO NOT EDIT
6 */
7#include <sys/types.h>
8
9#include "hash_tables.h"
10
11/*
12 * d=2
13 * n=40
14 * m=19
15 * c=2.09
16 * maxlen=1
17 * minklen=2
18 * maxklen=9
19 * minchar=97
20 * maxchar=119
21 * loop=0
22 * numiter=1
23 * seed=
24 */
25
26static const signed char directive_g[] = {
27	8, 0, 0, 5, 6, -1, 17, 15, 10, 6,
28	-1, -1, 10, 0, 0, -1, 18, 2, 3, 0,
29	7, -1, -1, -1, 0, 14, -1, -1, 11, 16,
30	-1, -1, 0, -1, 0, 0, 17, 0, -1, 1,
31};
32
33static const u_char directive_T0[] = {
34	26, 14, 19, 35, 10, 34, 18, 27, 1, 17,
35	22, 37, 12, 12, 36, 21, 0, 6, 1, 25,
36	9, 4, 19,
37};
38
39static const u_char directive_T1[] = {
40	25, 22, 19, 0, 2, 18, 33, 18, 30, 4,
41	30, 9, 21, 19, 16, 12, 35, 34, 4, 19,
42	9, 33, 16,
43};
44
45
46int
47directive_hash(const u_char *key, size_t len)
48{
49	unsigned f0, f1;
50	const u_char *kp = key;
51
52	if (len < 2 || len > 9)
53		return -1;
54
55	for (f0=f1=0; kp < key + len; ++kp) {
56		if (*kp < 97 || *kp > 119)
57			return -1;
58		f0 += directive_T0[-97 + *kp];
59		f1 += directive_T1[-97 + *kp];
60	}
61
62	f0 %= 40;
63	f1 %= 40;
64
65	return (directive_g[f0] + directive_g[f1]) % 19;
66}
67/*
68 * d=2
69 * n=74
70 * m=35
71 * c=2.09
72 * maxlen=1
73 * minklen=4
74 * maxklen=13
75 * minchar=46
76 * maxchar=95
77 * loop=0
78 * numiter=4
79 * seed=
80 */
81
82static const signed char keyword_g[] = {
83	12, 18, 7, 25, 30, 5, -1, -1, -1, 7,
84	-1, 0, 33, 0, 4, -1, -1, 13, 29, 0,
85	-1, 28, -1, 28, -1, 0, -1, 27, 4, 34,
86	-1, -1, -1, 30, 13, 10, -1, -1, 0, 10,
87	24, -1, -1, -1, 0, 6, 0, 0, -1, 23,
88	-1, -1, -1, 0, -1, 23, -1, -1, 19, 4,
89	-1, 31, 12, 16, -1, 20, 22, 9, 0, -1,
90	-1, 9, 4, 0,
91};
92
93static const u_char keyword_T0[] = {
94	34, 28, 50, 61, 14, 57, 48, 60, 20, 67,
95	60, 63, 0, 24, 28, 2, 49, 64, 18, 23,
96	36, 33, 40, 14, 38, 42, 71, 49, 2, 53,
97	53, 37, 7, 29, 24, 21, 12, 50, 59, 10,
98	43, 23, 0, 44, 47, 6, 46, 22, 48, 64,
99};
100
101static const u_char keyword_T1[] = {
102	18, 67, 39, 60, 7, 70, 2, 26, 31, 18,
103	73, 47, 61, 17, 38, 50, 22, 52, 13, 55,
104	56, 32, 63, 4, 64, 55, 49, 21, 47, 67,
105	33, 66, 60, 73, 30, 68, 69, 32, 72, 4,
106	28, 49, 51, 15, 66, 68, 43, 67, 46, 56,
107};
108
109
110int
111keyword_hash(const u_char *key, size_t len)
112{
113	unsigned f0, f1;
114	const u_char *kp = key;
115
116	if (len < 4 || len > 13)
117		return -1;
118
119	for (f0=f1=0; *kp; ++kp) {
120		if (*kp < 46 || *kp > 95)
121			return -1;
122		f0 += keyword_T0[-46 + *kp];
123		f1 += keyword_T1[-46 + *kp];
124	}
125
126	f0 %= 74;
127	f1 %= 74;
128
129	return (keyword_g[f0] + keyword_g[f1]) % 35;
130}
131