예제 #1
0
        /// <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);
        }
예제 #2
0
 internal char[] ReadCharsSimple(int len)
 {
     Contract.Requires(len <= ReadBytesLeft);
     var result = TextEncoding.GetChars(_buf, ReadPosition, len);
     ReadPosition += len;
     return result;
 }
예제 #3
0
        public char[] ReadChars(int byteLen)
        {
            Debug.Assert(byteLen <= ReadBytesLeft);
            var result = TextEncoding.GetChars(Buffer, ReadPosition, byteLen);

            ReadPosition += byteLen;
            return(result);
        }
예제 #4
0
        internal char[] ReadChars(int byteLen)
        {
            Contract.Requires(byteLen <= ReadBytesLeft);
            var result = TextEncoding.GetChars(_buf, ReadPosition, byteLen);

            ReadPosition += byteLen;
            return(result);
        }