/// <summary> /// Converts a given number of bytes into a char array and returns it. Expects the required bytes /// to already be in the buffer /// </summary> internal char[] ReadChars(int byteCount) { if (byteCount <= Size) { Ensure(byteCount); var result = TextEncoding.GetChars(_buf, ReadPosition, byteCount); ReadPosition += byteCount; return(result); } // Worst case: our buffer isn't big enough. For now, pessimistically allocate a char buffer // that will hold the maximum number of characters for the column length // TODO: Optimize var pessimisticNumChars = TextEncoding.GetMaxCharCount(byteCount); var pessimisticOutput = new char[pessimisticNumChars]; var actualNumChars = PopulateCharArray(pessimisticOutput, byteCount); if (actualNumChars == pessimisticNumChars) { return(pessimisticOutput); } var output = new char[actualNumChars]; Array.Copy(pessimisticOutput, 0, output, 0, actualNumChars); return(output); }
internal char[] ReadCharsSimple(int len) { Contract.Requires(len <= ReadBytesLeft); var result = TextEncoding.GetChars(_buf, ReadPosition, len); ReadPosition += len; return result; }
public char[] ReadChars(int byteLen) { Debug.Assert(byteLen <= ReadBytesLeft); var result = TextEncoding.GetChars(Buffer, ReadPosition, byteLen); ReadPosition += byteLen; return(result); }
internal char[] ReadChars(int byteLen) { Contract.Requires(byteLen <= ReadBytesLeft); var result = TextEncoding.GetChars(_buf, ReadPosition, byteLen); ReadPosition += byteLen; return(result); }