Skip to content

Commit 795ba04

Browse files
Move functions to use ctype utils, cleanup
1 parent 79a0b0c commit 795ba04

File tree

14 files changed

+329
-84
lines changed

14 files changed

+329
-84
lines changed

libc/src/__support/ctype_utils.h

Lines changed: 263 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,67 @@ LIBC_INLINE static constexpr int tolower(int ch) {
171171
}
172172
}
173173

174+
LIBC_INLINE static constexpr int toupper(int ch) {
175+
switch (ch) {
176+
case 'a':
177+
return 'A';
178+
case 'b':
179+
return 'B';
180+
case 'c':
181+
return 'C';
182+
case 'd':
183+
return 'D';
184+
case 'e':
185+
return 'E';
186+
case 'f':
187+
return 'F';
188+
case 'g':
189+
return 'G';
190+
case 'h':
191+
return 'H';
192+
case 'i':
193+
return 'I';
194+
case 'j':
195+
return 'J';
196+
case 'k':
197+
return 'K';
198+
case 'l':
199+
return 'L';
200+
case 'm':
201+
return 'M';
202+
case 'n':
203+
return 'N';
204+
case 'o':
205+
return 'O';
206+
case 'p':
207+
return 'P';
208+
case 'q':
209+
return 'Q';
210+
case 'r':
211+
return 'R';
212+
case 's':
213+
return 'S';
214+
case 't':
215+
return 'T';
216+
case 'u':
217+
return 'U';
218+
case 'v':
219+
return 'V';
220+
case 'w':
221+
return 'W';
222+
case 'x':
223+
return 'X';
224+
case 'y':
225+
return 'Y';
226+
case 'z':
227+
return 'Z';
228+
default:
229+
return ch;
230+
}
231+
}
232+
174233
LIBC_INLINE static constexpr bool isalpha(int ch) {
175-
switch (tolower(ch)) {
234+
switch (ch) {
176235
case 'a':
177236
case 'b':
178237
case 'c':
@@ -199,18 +258,110 @@ LIBC_INLINE static constexpr bool isalpha(int ch) {
199258
case 'x':
200259
case 'y':
201260
case 'z':
261+
case 'A':
262+
case 'B':
263+
case 'C':
264+
case 'D':
265+
case 'E':
266+
case 'F':
267+
case 'G':
268+
case 'H':
269+
case 'I':
270+
case 'J':
271+
case 'K':
272+
case 'L':
273+
case 'M':
274+
case 'N':
275+
case 'O':
276+
case 'P':
277+
case 'Q':
278+
case 'R':
279+
case 'S':
280+
case 'T':
281+
case 'U':
282+
case 'V':
283+
case 'W':
284+
case 'X':
285+
case 'Y':
286+
case 'Z':
202287
return true;
203288
default:
204289
return false;
205290
}
206291
}
207292

208293
LIBC_INLINE static constexpr bool isalnum(int ch) {
209-
return isalpha(ch) || isdigit(ch);
294+
switch (ch) {
295+
case 'a':
296+
case 'b':
297+
case 'c':
298+
case 'd':
299+
case 'e':
300+
case 'f':
301+
case 'g':
302+
case 'h':
303+
case 'i':
304+
case 'j':
305+
case 'k':
306+
case 'l':
307+
case 'm':
308+
case 'n':
309+
case 'o':
310+
case 'p':
311+
case 'q':
312+
case 'r':
313+
case 's':
314+
case 't':
315+
case 'u':
316+
case 'v':
317+
case 'w':
318+
case 'x':
319+
case 'y':
320+
case 'z':
321+
case 'A':
322+
case 'B':
323+
case 'C':
324+
case 'D':
325+
case 'E':
326+
case 'F':
327+
case 'G':
328+
case 'H':
329+
case 'I':
330+
case 'J':
331+
case 'K':
332+
case 'L':
333+
case 'M':
334+
case 'N':
335+
case 'O':
336+
case 'P':
337+
case 'Q':
338+
case 'R':
339+
case 'S':
340+
case 'T':
341+
case 'U':
342+
case 'V':
343+
case 'W':
344+
case 'X':
345+
case 'Y':
346+
case 'Z':
347+
case '0':
348+
case '1':
349+
case '2':
350+
case '3':
351+
case '4':
352+
case '5':
353+
case '6':
354+
case '7':
355+
case '8':
356+
case '9':
357+
return true;
358+
default:
359+
return false;
360+
}
210361
}
211362

212363
LIBC_INLINE static constexpr int b36_char_to_int(int ch) {
213-
switch (tolower(ch)) {
364+
switch (ch) {
214365
case '0':
215366
return 0;
216367
case '1':
@@ -232,62 +383,171 @@ LIBC_INLINE static constexpr int b36_char_to_int(int ch) {
232383
case '9':
233384
return 9;
234385
case 'a':
386+
case 'A':
235387
return 10;
236388
case 'b':
389+
case 'B':
237390
return 11;
238391
case 'c':
392+
case 'C':
239393
return 12;
240394
case 'd':
395+
case 'D':
241396
return 13;
242397
case 'e':
398+
case 'E':
243399
return 14;
244400
case 'f':
401+
case 'F':
245402
return 15;
246403
case 'g':
404+
case 'G':
247405
return 16;
248406
case 'h':
407+
case 'H':
249408
return 17;
250409
case 'i':
410+
case 'I':
251411
return 18;
252412
case 'j':
413+
case 'J':
253414
return 19;
254415
case 'k':
416+
case 'K':
255417
return 20;
256418
case 'l':
419+
case 'L':
257420
return 21;
258421
case 'm':
422+
case 'M':
259423
return 22;
260424
case 'n':
425+
case 'N':
261426
return 23;
262427
case 'o':
428+
case 'O':
263429
return 24;
264430
case 'p':
431+
case 'P':
265432
return 25;
266433
case 'q':
434+
case 'Q':
267435
return 26;
268436
case 'r':
437+
case 'R':
269438
return 27;
270439
case 's':
440+
case 'S':
271441
return 28;
272442
case 't':
443+
case 'T':
273444
return 29;
274445
case 'u':
446+
case 'U':
275447
return 30;
276448
case 'v':
449+
case 'V':
277450
return 31;
278451
case 'w':
452+
case 'W':
279453
return 32;
280454
case 'x':
455+
case 'X':
281456
return 33;
282457
case 'y':
458+
case 'Y':
283459
return 34;
284460
case 'z':
461+
case 'Z':
285462
return 35;
286463
default:
287464
return 0;
288465
}
289466
}
290467

468+
LIBC_INLINE static constexpr int int_to_b36_char(int num) {
469+
// Can't actually use LIBC_ASSERT here because it depends on integer_to_string
470+
// which depends on this.
471+
472+
// LIBC_ASSERT(num < 36);
473+
switch (num) {
474+
case 0:
475+
return '0';
476+
case 1:
477+
return '1';
478+
case 2:
479+
return '2';
480+
case 3:
481+
return '3';
482+
case 4:
483+
return '4';
484+
case 5:
485+
return '5';
486+
case 6:
487+
return '6';
488+
case 7:
489+
return '7';
490+
case 8:
491+
return '8';
492+
case 9:
493+
return '9';
494+
case 10:
495+
return 'a';
496+
case 11:
497+
return 'b';
498+
case 12:
499+
return 'c';
500+
case 13:
501+
return 'd';
502+
case 14:
503+
return 'e';
504+
case 15:
505+
return 'f';
506+
case 16:
507+
return 'g';
508+
case 17:
509+
return 'h';
510+
case 18:
511+
return 'i';
512+
case 19:
513+
return 'j';
514+
case 20:
515+
return 'k';
516+
case 21:
517+
return 'l';
518+
case 22:
519+
return 'm';
520+
case 23:
521+
return 'n';
522+
case 24:
523+
return 'o';
524+
case 25:
525+
return 'p';
526+
case 26:
527+
return 'q';
528+
case 27:
529+
return 'r';
530+
case 28:
531+
return 's';
532+
case 29:
533+
return 't';
534+
case 30:
535+
return 'u';
536+
case 31:
537+
return 'v';
538+
case 32:
539+
return 'w';
540+
case 33:
541+
return 'x';
542+
case 34:
543+
return 'y';
544+
case 35:
545+
return 'z';
546+
default:
547+
return '!';
548+
}
549+
}
550+
291551
LIBC_INLINE static constexpr bool isspace(int ch) {
292552
switch (ch) {
293553
case ' ':

0 commit comments

Comments
 (0)