3 ms·
I mean, isn't the trivial answer to just collapse the if else tree into just math that's evaluated always? u32 a = (code <= 0x7F); u32 b = (code <= 0x07FF)
by emilfihlman 2y ago
I mean, isn't the trivial answer to just collapse the if else tree into just math that's evaluated always?
u32 a = (code <= 0x7F);
u32 b = (code <= 0x07FF);
u32 c = ((code < 0xD800) ||
(0xDFFF < code));
u32 d = (code <= 0xFFFF) * c;
u32 e = (code <= 0x10FFFF);
u32 v = (c && e);
return(-1 * !v + v * (4 - a - b - d));
Highly likely easy to optimise.
- emilfihlman 2y agoCan't edit anymore but a better (only slightly) and clearer version is u32 length = (code <= 0x7F) + (code <= 0x07FF) + (code <= 0xFFFF); u32 limit = (code <= 0x10FFFF); u32 allowed = ((code < 0xD800) || (0xDFFF < code)); u32 valid = (limit && allowed); return(-1 * !valid + valid * (4 - length));