|
| 1 | +#include "yp_encoding.h" |
| 2 | + |
| 3 | +// Each element of the following table contains a bitfield that indicates a |
| 4 | +// piece of information about the corresponding ASCII character. |
| 5 | +static unsigned char yp_encoding_ascii_table[256] = { |
| 6 | + // 0 1 2 3 4 5 6 7 8 9 A B C D E F |
| 7 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // 0x |
| 8 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // 1x |
| 9 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // 2x |
| 10 | + 0b010, 0b010, 0b010, 0b010, 0b010, 0b010, 0b010, 0b010, 0b010, 0b010, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // 3x |
| 11 | + 0b000, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, // 4x |
| 12 | + 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b111, 0b000, 0b000, 0b000, 0b000, 0b000, // 5x |
| 13 | + 0b000, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, // 6x |
| 14 | + 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b011, 0b000, 0b000, 0b000, 0b000, 0b000, // 7x |
| 15 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // 8x |
| 16 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // 9x |
| 17 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // Ax |
| 18 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // Bx |
| 19 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // Cx |
| 20 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // Dx |
| 21 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // Ex |
| 22 | + 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, 0b000, // Fx |
| 23 | +}; |
| 24 | + |
| 25 | +__attribute__((__visibility__("default"))) extern size_t |
| 26 | +yp_encoding_ascii_alpha_char(const char *c) { |
| 27 | + const unsigned char v = *c; |
| 28 | + return (yp_encoding_ascii_table[v] & YP_ENCODING_ALPHABETIC_BIT) ? 1 : 0; |
| 29 | +} |
| 30 | + |
| 31 | +__attribute__((__visibility__("default"))) extern size_t |
| 32 | +yp_encoding_ascii_alnum_char(const char *c) { |
| 33 | + const unsigned char v = *c; |
| 34 | + return (yp_encoding_ascii_table[v] & YP_ENCODING_ALPHANUMERIC_BIT) ? 1 : 0; |
| 35 | +} |
| 36 | + |
| 37 | +__attribute__((__visibility__("default"))) extern bool |
| 38 | +yp_encoding_ascii_isupper_char(const char *c) { |
| 39 | + const unsigned char v = *c; |
| 40 | + return (yp_encoding_ascii_table[v] & YP_ENCODING_UPPERCASE_BIT) ? true : false; |
| 41 | +} |
0 commit comments