System.Xml.XmlReaderBinarySupport.ReadValueChunk C# (CSharp) Method

ReadValueChunk() public method

public ReadValueChunk ( char buffer, int offset, int length ) : int
buffer char
offset int
length int
return int
		public int ReadValueChunk (
			char [] buffer, int offset, int length)
		{
			CommandState backup = state;
			if (state == CommandState.None)
				CheckState (false, CommandState.None);

			if (offset < 0)
				throw CreateArgumentOutOfRangeException ("offset", offset, "Offset must be non-negative integer.");
			else if (length < 0)
				throw CreateArgumentOutOfRangeException ("length", length, "Length must be non-negative integer.");
			else if (buffer.Length < offset + length)
				throw new ArgumentOutOfRangeException ("buffer length is smaller than the sum of offset and length.");

			if (length == 0)
				return 0;

			if (!hasCache) {
				if (reader.IsEmptyElement)
					return 0;
			}

			bool loop = true;
			while (loop && textCache.Length < length) {
				switch (reader.NodeType) {
				case XmlNodeType.Text:
				case XmlNodeType.CDATA:
				case XmlNodeType.SignificantWhitespace:
				case XmlNodeType.Whitespace:
					if (hasCache) {
						switch (reader.NodeType) {
						case XmlNodeType.Text:
						case XmlNodeType.CDATA:
						case XmlNodeType.SignificantWhitespace:
						case XmlNodeType.Whitespace:
							Read ();
							break;
						default:
							loop = false;
							break;
						}
					}
					textCache.Append (reader.Value);
					hasCache = true;
					break;
				default:
					loop = false;
					break;
				}
			}
			state = backup;
			int min = textCache.Length;
			if (min > length)
				min = length;
			string str = textCache.ToString (0, min);
			textCache.Remove (0, str.Length);
			str.CopyTo (0, buffer, offset, str.Length);
			if (min < length && loop)
				return min + ReadValueChunk (buffer, offset + min, length - min);
			else
				return min;
		}

Usage Example

Esempio n. 1
0
        internal virtual int ReadValueChunk(
            char [] buffer, int offset, int length)
#endif
        {
            if (!CanReadValueChunk)
            {
                throw new NotSupportedException();
            }
            if (binary == null)
            {
                binary = new XmlReaderBinarySupport(this);
            }
            return(binary.ReadValueChunk(buffer, offset, length));
        }