public unsafe ValueString CreateValueString(ValueString vs) { EnsureSpace(vs._length); fixed(char *dest = str) { var destx = dest + used; var offset = used; fixed(char *source = vs._string) { #if NET35 ValueString.CopyChars(source + vs._start, destx, vs._length); #else Buffer.MemoryCopy((void *)(source + vs._start), destx, vs._length * 2, vs._length * 2); #endif } used += vs._length; return(new ValueString(str, offset, vs._length)); } }
public unsafe ValueString CreateValueString(char[] arr, int start, int length) { if (length == 0) { return(ValueString.Empty); } if (start + length > arr.Length) { throw new ArgumentException(); } EnsureSpace(length); fixed(char *ptr = str) { fixed(char *src = arr) { ValueString.CopyChars(ptr + used, src + start, length); var offset = used; used += length; return(new ValueString(str, offset, length)); } } }