Reducing the cost of autodecoding

Patrick Schluter via Digitalmars-d digitalmars-d at puremagic.com
Sat Oct 15 12:00:12 PDT 2016


On Saturday, 15 October 2016 at 18:40:11 UTC, Uplink_Coder wrote:
> It can also be written like this producing smaller code.
> But it the cost of slower decoding.
>
> dchar myFront(ref char[] str) pure
> {
>     dchar c = cast(dchar) str.ptr[0];
>     if (c & 128)
>     {
>         if (c & 64)
>         {
>             int idx = 0;
>             int l = charWidthTab.ptr[c - 192];
>             if (str.length < l)
>                 goto Linvalid;
>             c = 0;
>           l--;
>             while(l) {
>               l--;
>                c |= str.ptr[idx++];
>                c <<= 6;
>             }
>             c |= str.ptr[idx];
>
>        }
>         else
>     Linvalid : throw new Exception("yadayada");
>
>     }
>     return c;
> }

Just a question. Do encoding errors not have to be detected or is 
validity of the string guaranteed? Wrong continuation bytes or 
overlong encodings are not detected by this routine.


More information about the Digitalmars-d mailing list