On Tuesday, 11 October 2016 at 07:30:26 UTC, Matthias Bentrup wrote:

A branch-free version:

void popFront4(ref char[] s) @trusted pure nothrow {
  immutable c = s[0];
  uint char_length = 1 + (c >= 192) + (c >= 240) + (c >= 248);
  s = s.ptr[char_length .. s.length];
}

Theoretically the char_length could be computed with three sub and addc instructions, but no compiler is smart enough to detect that.

You still need to special case c < 128
as well as the follow chars.

also smaller c's are more common the bigger ones making the branching version faster on average.

Reply via email to