1use crate::Color;
7
8static COLORS: Map<Color> = Map {
9 key: 3213172566270843353,
10 disps: &[
11 (0, 37),
12 (0, 74),
13 (1, 0),
14 (0, 22),
15 (0, 92),
16 (2, 125),
17 (0, 73),
18 (0, 8),
19 (0, 2),
20 (0, 4),
21 (26, 16),
22 (67, 121),
23 (0, 3),
24 (0, 4),
25 (0, 60),
26 (0, 39),
27 (0, 130),
28 (0, 15),
29 (3, 38),
30 (0, 136),
31 (7, 75),
32 (6, 141),
33 (7, 67),
34 (0, 14),
35 (0, 128),
36 (27, 111),
37 (1, 31),
38 (0, 12),
39 (2, 49),
40 (0, 2),
41 ],
42 entries: &[
43 ("lightgrey", Color { red: 211, green: 211, blue: 211, alpha: 255 }),
44 ("lavenderblush", Color { red: 255, green: 240, blue: 245, alpha: 255 }),
45 ("deeppink", Color { red: 255, green: 20, blue: 147, alpha: 255 }),
46 ("seashell", Color { red: 255, green: 245, blue: 238, alpha: 255 }),
47 ("lightsalmon", Color { red: 255, green: 160, blue: 122, alpha: 255 }),
48 ("green", Color { red: 0, green: 128, blue: 0, alpha: 255 }),
49 ("lightgreen", Color { red: 144, green: 238, blue: 144, alpha: 255 }),
50 ("black", Color { red: 0, green: 0, blue: 0, alpha: 255 }),
51 ("deepskyblue", Color { red: 0, green: 191, blue: 255, alpha: 255 }),
52 ("mistyrose", Color { red: 255, green: 228, blue: 225, alpha: 255 }),
53 ("silver", Color { red: 192, green: 192, blue: 192, alpha: 255 }),
54 ("dimgray", Color { red: 105, green: 105, blue: 105, alpha: 255 }),
55 ("navajowhite", Color { red: 255, green: 222, blue: 173, alpha: 255 }),
56 ("royalblue", Color { red: 65, green: 105, blue: 225, alpha: 255 }),
57 ("peru", Color { red: 205, green: 133, blue: 63, alpha: 255 }),
58 ("darkgrey", Color { red: 169, green: 169, blue: 169, alpha: 255 }),
59 ("steelblue", Color { red: 70, green: 130, blue: 180, alpha: 255 }),
60 ("teal", Color { red: 0, green: 128, blue: 128, alpha: 255 }),
61 ("orangered", Color { red: 255, green: 69, blue: 0, alpha: 255 }),
62 ("mediumslateblue", Color { red: 123, green: 104, blue: 238, alpha: 255 }),
63 ("blueviolet", Color { red: 138, green: 43, blue: 226, alpha: 255 }),
64 ("cornflowerblue", Color { red: 100, green: 149, blue: 237, alpha: 255 }),
65 ("cyan", Color { red: 0, green: 255, blue: 255, alpha: 255 }),
66 ("beige", Color { red: 245, green: 245, blue: 220, alpha: 255 }),
67 ("goldenrod", Color { red: 218, green: 165, blue: 32, alpha: 255 }),
68 ("rosybrown", Color { red: 188, green: 143, blue: 143, alpha: 255 }),
69 ("yellow", Color { red: 255, green: 255, blue: 0, alpha: 255 }),
70 ("blue", Color { red: 0, green: 0, blue: 255, alpha: 255 }),
71 ("darkblue", Color { red: 0, green: 0, blue: 139, alpha: 255 }),
72 ("aliceblue", Color { red: 240, green: 248, blue: 255, alpha: 255 }),
73 ("white", Color { red: 255, green: 255, blue: 255, alpha: 255 }),
74 ("mediumblue", Color { red: 0, green: 0, blue: 205, alpha: 255 }),
75 ("dodgerblue", Color { red: 30, green: 144, blue: 255, alpha: 255 }),
76 ("limegreen", Color { red: 50, green: 205, blue: 50, alpha: 255 }),
77 ("purple", Color { red: 128, green: 0, blue: 128, alpha: 255 }),
78 ("lightsteelblue", Color { red: 176, green: 196, blue: 222, alpha: 255 }),
79 ("lightslategray", Color { red: 119, green: 136, blue: 153, alpha: 255 }),
80 ("seagreen", Color { red: 46, green: 139, blue: 87, alpha: 255 }),
81 ("mediumvioletred", Color { red: 199, green: 21, blue: 133, alpha: 255 }),
82 ("slategrey", Color { red: 112, green: 128, blue: 144, alpha: 255 }),
83 ("darkslategrey", Color { red: 47, green: 79, blue: 79, alpha: 255 }),
84 ("turquoise", Color { red: 64, green: 224, blue: 208, alpha: 255 }),
85 ("paleturquoise", Color { red: 175, green: 238, blue: 238, alpha: 255 }),
86 ("lightgoldenrodyellow", Color { red: 250, green: 250, blue: 210, alpha: 255 }),
87 ("magenta", Color { red: 255, green: 0, blue: 255, alpha: 255 }),
88 ("darkseagreen", Color { red: 143, green: 188, blue: 143, alpha: 255 }),
89 ("lightcyan", Color { red: 224, green: 255, blue: 255, alpha: 255 }),
90 ("lightcoral", Color { red: 240, green: 128, blue: 128, alpha: 255 }),
91 ("mediumseagreen", Color { red: 60, green: 179, blue: 113, alpha: 255 }),
92 ("palegoldenrod", Color { red: 238, green: 232, blue: 170, alpha: 255 }),
93 ("palegreen", Color { red: 152, green: 251, blue: 152, alpha: 255 }),
94 ("darkslateblue", Color { red: 72, green: 61, blue: 139, alpha: 255 }),
95 ("moccasin", Color { red: 255, green: 228, blue: 181, alpha: 255 }),
96 ("forestgreen", Color { red: 34, green: 139, blue: 34, alpha: 255 }),
97 ("darkkhaki", Color { red: 189, green: 183, blue: 107, alpha: 255 }),
98 ("chartreuse", Color { red: 127, green: 255, blue: 0, alpha: 255 }),
99 ("floralwhite", Color { red: 255, green: 250, blue: 240, alpha: 255 }),
100 ("snow", Color { red: 255, green: 250, blue: 250, alpha: 255 }),
101 ("fuchsia", Color { red: 255, green: 0, blue: 255, alpha: 255 }),
102 ("orchid", Color { red: 218, green: 112, blue: 214, alpha: 255 }),
103 ("darkorchid", Color { red: 153, green: 50, blue: 204, alpha: 255 }),
104 ("darkred", Color { red: 139, green: 0, blue: 0, alpha: 255 }),
105 ("darksalmon", Color { red: 233, green: 150, blue: 122, alpha: 255 }),
106 ("crimson", Color { red: 220, green: 20, blue: 60, alpha: 255 }),
107 ("lime", Color { red: 0, green: 255, blue: 0, alpha: 255 }),
108 ("palevioletred", Color { red: 219, green: 112, blue: 147, alpha: 255 }),
109 ("lightseagreen", Color { red: 32, green: 178, blue: 170, alpha: 255 }),
110 ("ivory", Color { red: 255, green: 255, blue: 240, alpha: 255 }),
111 ("powderblue", Color { red: 176, green: 224, blue: 230, alpha: 255 }),
112 ("aquamarine", Color { red: 127, green: 255, blue: 212, alpha: 255 }),
113 ("darkturquoise", Color { red: 0, green: 206, blue: 209, alpha: 255 }),
114 ("lavender", Color { red: 230, green: 230, blue: 250, alpha: 255 }),
115 ("azure", Color { red: 240, green: 255, blue: 255, alpha: 255 }),
116 ("mediumturquoise", Color { red: 72, green: 209, blue: 204, alpha: 255 }),
117 ("lightgray", Color { red: 211, green: 211, blue: 211, alpha: 255 }),
118 ("transparent", Color { red: 0, green: 0, blue: 0, alpha: 0 }),
119 ("gainsboro", Color { red: 220, green: 220, blue: 220, alpha: 255 }),
120 ("olivedrab", Color { red: 107, green: 142, blue: 35, alpha: 255 }),
121 ("papayawhip", Color { red: 255, green: 239, blue: 213, alpha: 255 }),
122 ("tomato", Color { red: 255, green: 99, blue: 71, alpha: 255 }),
123 ("midnightblue", Color { red: 25, green: 25, blue: 112, alpha: 255 }),
124 ("pink", Color { red: 255, green: 192, blue: 203, alpha: 255 }),
125 ("yellowgreen", Color { red: 154, green: 205, blue: 50, alpha: 255 }),
126 ("slategray", Color { red: 112, green: 128, blue: 144, alpha: 255 }),
127 ("red", Color { red: 255, green: 0, blue: 0, alpha: 255 }),
128 ("indigo", Color { red: 75, green: 0, blue: 130, alpha: 255 }),
129 ("orange", Color { red: 255, green: 165, blue: 0, alpha: 255 }),
130 ("grey", Color { red: 128, green: 128, blue: 128, alpha: 255 }),
131 ("wheat", Color { red: 245, green: 222, blue: 179, alpha: 255 }),
132 ("darkgoldenrod", Color { red: 184, green: 134, blue: 11, alpha: 255 }),
133 ("lawngreen", Color { red: 124, green: 252, blue: 0, alpha: 255 }),
134 ("lightslategrey", Color { red: 119, green: 136, blue: 153, alpha: 255 }),
135 ("burlywood", Color { red: 222, green: 184, blue: 135, alpha: 255 }),
136 ("aqua", Color { red: 0, green: 255, blue: 255, alpha: 255 }),
137 ("saddlebrown", Color { red: 139, green: 69, blue: 19, alpha: 255 }),
138 ("oldlace", Color { red: 253, green: 245, blue: 230, alpha: 255 }),
139 ("lightskyblue", Color { red: 135, green: 206, blue: 250, alpha: 255 }),
140 ("violet", Color { red: 238, green: 130, blue: 238, alpha: 255 }),
141 ("dimgrey", Color { red: 105, green: 105, blue: 105, alpha: 255 }),
142 ("darkorange", Color { red: 255, green: 140, blue: 0, alpha: 255 }),
143 ("lightblue", Color { red: 173, green: 216, blue: 230, alpha: 255 }),
144 ("khaki", Color { red: 240, green: 230, blue: 140, alpha: 255 }),
145 ("coral", Color { red: 255, green: 127, blue: 80, alpha: 255 }),
146 ("brown", Color { red: 165, green: 42, blue: 42, alpha: 255 }),
147 ("mediumpurple", Color { red: 147, green: 112, blue: 219, alpha: 255 }),
148 ("linen", Color { red: 250, green: 240, blue: 230, alpha: 255 }),
149 ("mediumorchid", Color { red: 186, green: 85, blue: 211, alpha: 255 }),
150 ("indianred", Color { red: 205, green: 92, blue: 92, alpha: 255 }),
151 ("maroon", Color { red: 128, green: 0, blue: 0, alpha: 255 }),
152 ("firebrick", Color { red: 178, green: 34, blue: 34, alpha: 255 }),
153 ("skyblue", Color { red: 135, green: 206, blue: 235, alpha: 255 }),
154 ("darkgray", Color { red: 169, green: 169, blue: 169, alpha: 255 }),
155 ("hotpink", Color { red: 255, green: 105, blue: 180, alpha: 255 }),
156 ("olive", Color { red: 128, green: 128, blue: 0, alpha: 255 }),
157 ("sienna", Color { red: 160, green: 82, blue: 45, alpha: 255 }),
158 ("cadetblue", Color { red: 95, green: 158, blue: 160, alpha: 255 }),
159 ("darkslategray", Color { red: 47, green: 79, blue: 79, alpha: 255 }),
160 ("slateblue", Color { red: 106, green: 90, blue: 205, alpha: 255 }),
161 ("plum", Color { red: 221, green: 160, blue: 221, alpha: 255 }),
162 ("mediumspringgreen", Color { red: 0, green: 250, blue: 154, alpha: 255 }),
163 ("thistle", Color { red: 216, green: 191, blue: 216, alpha: 255 }),
164 ("mintcream", Color { red: 245, green: 255, blue: 250, alpha: 255 }),
165 ("darkmagenta", Color { red: 139, green: 0, blue: 139, alpha: 255 }),
166 ("lemonchiffon", Color { red: 255, green: 250, blue: 205, alpha: 255 }),
167 ("bisque", Color { red: 255, green: 228, blue: 196, alpha: 255 }),
168 ("antiquewhite", Color { red: 250, green: 235, blue: 215, alpha: 255 }),
169 ("darkgreen", Color { red: 0, green: 100, blue: 0, alpha: 255 }),
170 ("whitesmoke", Color { red: 245, green: 245, blue: 245, alpha: 255 }),
171 ("lightpink", Color { red: 255, green: 182, blue: 193, alpha: 255 }),
172 ("darkcyan", Color { red: 0, green: 139, blue: 139, alpha: 255 }),
173 ("tan", Color { red: 210, green: 180, blue: 140, alpha: 255 }),
174 ("blanchedalmond", Color { red: 255, green: 235, blue: 205, alpha: 255 }),
175 ("honeydew", Color { red: 240, green: 255, blue: 240, alpha: 255 }),
176 ("salmon", Color { red: 250, green: 128, blue: 114, alpha: 255 }),
177 ("lightyellow", Color { red: 255, green: 255, blue: 224, alpha: 255 }),
178 ("springgreen", Color { red: 0, green: 255, blue: 127, alpha: 255 }),
179 ("cornsilk", Color { red: 255, green: 248, blue: 220, alpha: 255 }),
180 ("sandybrown", Color { red: 244, green: 164, blue: 96, alpha: 255 }),
181 ("mediumaquamarine", Color { red: 102, green: 205, blue: 170, alpha: 255 }),
182 ("darkviolet", Color { red: 148, green: 0, blue: 211, alpha: 255 }),
183 ("darkolivegreen", Color { red: 85, green: 107, blue: 47, alpha: 255 }),
184 ("gold", Color { red: 255, green: 215, blue: 0, alpha: 255 }),
185 ("peachpuff", Color { red: 255, green: 218, blue: 185, alpha: 255 }),
186 ("greenyellow", Color { red: 173, green: 255, blue: 47, alpha: 255 }),
187 ("gray", Color { red: 128, green: 128, blue: 128, alpha: 255 }),
188 ("navy", Color { red: 0, green: 0, blue: 128, alpha: 255 }),
189 ("ghostwhite", Color { red: 248, green: 248, blue: 255, alpha: 255 }),
190 ("chocolate", Color { red: 210, green: 105, blue: 30, alpha: 255 }),
191 ],
192};
193
194pub fn from_str(text: &str) -> Option<Color> {
195 COLORS.get(text).cloned()
196}
197
198use std::hash::Hasher;
203
204pub struct Map<V: 'static> {
205 pub key: u64,
206 pub disps: &'static [(u32, u32)],
207 pub entries: &'static[(&'static str, V)],
208}
209
210impl<V> Map<V> {
211 pub fn get(&self, key: &str) -> Option<&V> {
212 let hash = hash(key, self.key);
213 let index = get_index(hash, self.disps, self.entries.len());
214 let entry = &self.entries[index as usize];
215 if entry.0 == key {
216 Some(&entry.1)
217 } else {
218 None
219 }
220 }
221}
222
223#[inline]
224fn hash(x: &str, key: u64) -> u64 {
225 let mut hasher = siphasher::sip::SipHasher13::new_with_keys(0, key);
226 hasher.write(x.as_bytes());
227 hasher.finish()
228}
229
230#[inline]
231fn get_index(hash: u64, disps: &[(u32, u32)], len: usize) -> u32 {
232 let (g, f1, f2) = split(hash);
233 let (d1, d2) = disps[(g % (disps.len() as u32)) as usize];
234 displace(f1, f2, d1, d2) % (len as u32)
235}
236
237#[inline]
238fn split(hash: u64) -> (u32, u32, u32) {
239 const BITS: u32 = 21;
240 const MASK: u64 = (1 << BITS) - 1;
241
242 ((hash & MASK) as u32,
243 ((hash >> BITS) & MASK) as u32,
244 ((hash >> (2 * BITS)) & MASK) as u32)
245}
246
247#[inline]
248fn displace(f1: u32, f2: u32, d1: u32, d2: u32) -> u32 {
249 d2 + f1 * d1 + f2
250}