1 /*
2 * DO NOT EDIT
3 * $FreeBSD: stable/10/usr.bin/make/hash_tables.c 177102 2008-03-12 14:51:47Z obrien $
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
26 static 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
33 static 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
39 static 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
46 int
directive_hash(const u_char * key,size_t len)47 directive_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
82 static 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
93 static 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
101 static 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
110 int
keyword_hash(const u_char * key,size_t len)111 keyword_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