aboutsummaryrefslogtreecommitdiffstats
path: root/libcharconv_flipped.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libcharconv_flipped.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/libcharconv_flipped.c b/libcharconv_flipped.c
index 43893fc..952d7e6 100644
--- a/libcharconv_flipped.c
+++ b/libcharconv_flipped.c
@@ -30,14 +30,21 @@ libcharconv_flipped(const char *s, size_t slen, size_t *n, uint_least32_t *cp, s
continue;
}
- for (i = 0u; i < sizeof(pairs) / sizeof(*pairs); i++) {
- if (c == pairs[i].a) {
- c = pairs[i].b;
- goto conv;
- }
- if (c == pairs[i].b) {
- c = pairs[i].a;
- goto conv;
+ if (UINT32_C(0x1F063) <= c && c <= UINT32_C(0x1F093)) {
+ c -= UINT32_C(0x1F063);
+ c = c % 7u * 7u + c / 7u;
+ c += UINT32_C(0x1F063);
+ goto conv;
+ } else {
+ for (i = 0u; i < sizeof(pairs) / sizeof(*pairs); i++) {
+ if (c == pairs[i].a) {
+ c = pairs[i].b;
+ goto conv;
+ }
+ if (c == pairs[i].b) {
+ c = pairs[i].a;
+ goto conv;
+ }
}
}