public unsafe ValueString CreateValueStringFromUtf8(byte[] arr, int start, int length)
{
if (start + length > arr.Length) throw new ArgumentException();
EnsureSpace(length * 2);
fixed (char* ptr = str)
{
var ptrx = ptr + used;
var offset = used;
foreach (var codePoint in new Utf8String.CodePointEnumerable(arr, start, length))
{
int charsEncoded;
if (!Utf16LittleEndianEncoder.TryEncodeCodePoint(codePoint, ptrx, out charsEncoded))
{
// TODO: Change Exception type
throw new Exception("invalid character");
}
ptrx += charsEncoded;
}
var strlen = (int)(ptrx - ptr - used);
used += strlen;
return new ValueString(str, offset, strlen);
}
}