Merge branch 'vendor/BINUTILS221'
[dragonfly.git] / usr.bin / make / hash_tables.c
1 /*
2  * DO NOT EDIT
3  * $DragonFly: src/usr.bin/make/hash_tables.c,v 1.1 2005/04/29 23:11:49 okumoto Exp $
4  * auto-generated from /usr/home/okumoto/Work/make/dfly-src/make/parse.c
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, 0, 0, 2, -1, 16, 2, 3, 0,
29         7, -1, -1, -1, 0, 14, -1, -1, 11, 7,
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
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=72
70  * m=34
71  * c=2.09
72  * maxlen=1
73  * minklen=4
74  * maxklen=12
75  * minchar=46
76  * maxchar=95
77  * loop=0
78  * numiter=4
79  * seed=
80  */
81
82 static const signed char keyword_g[] = {
83         8, 15, -1, 25, 22, 20, -1, 33, 16, -1,
84         21, 31, 0, 0, 0, 29, 30, 8, -1, 0,
85         -1, 21, -1, 0, -1, -1, -1, -1, -1, 4,
86         -1, -1, 25, 28, -1, 27, 11, 23, 0, 0,
87         24, -1, -1, 0, 3, 0, -1, 24, 0, 0,
88         -1, 28, 12, -1, 20, 13, -1, 5, -1, 1,
89         0, 0, -1, 0, 10, 19, 13, 9, -1, 2,
90         -1, -1, 
91 };
92
93 static const u_char keyword_T0[] = {
94         32, 10, 54, 61, 2, 35, 62, 50, 52, 53,
95         70, 7, 62, 18, 24, 30, 31, 66, 10, 61,
96         52, 71, 56, 56, 28, 6, 33, 67, 12, 41,
97         39, 45, 51, 21, 34, 53, 56, 40, 47, 52,
98         21, 61, 60, 12, 7, 28, 42, 38, 38, 52,
99 };
100
101 static const u_char keyword_T1[] = {
102         0, 39, 65, 48, 13, 62, 46, 42, 5, 50,
103         69, 69, 69, 43, 2, 46, 12, 6, 11, 9,
104         24, 10, 25, 64, 68, 13, 57, 55, 17, 33,
105         1, 18, 0, 67, 10, 14, 57, 56, 0, 6,
106         50, 13, 3, 47, 56, 22, 37, 13, 28, 48,
107 };
108
109
110 int
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 > 12)
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 %= 72;
127         f1 %= 72;
128
129         return (keyword_g[f0] + keyword_g[f1]) % 34;
130 }