public Double ToDouble() { ValueHandleType type = _type; if (type == ValueHandleType.Double) { return(GetDouble()); } if (type == ValueHandleType.Single) { return(GetSingle()); } if (type == ValueHandleType.Zero) { return(0); } if (type == ValueHandleType.One) { return(1); } if (type == ValueHandleType.Int8) { return(GetInt8()); } if (type == ValueHandleType.Int16) { return(GetInt16()); } if (type == ValueHandleType.Int32) { return(GetInt32()); } if (type == ValueHandleType.UTF8) { return(XmlConverter.ToDouble(_bufferReader.Buffer, _offset, _length)); } return(XmlConverter.ToDouble(GetString())); }
public Single ToSingle() { ValueHandleType type = _type; if (type == ValueHandleType.Single) { return(GetSingle()); } if (type == ValueHandleType.Double) { double value = GetDouble(); if ((value >= Single.MinValue && value <= Single.MaxValue) || double.IsInfinity(value) || double.IsNaN(value)) { return((Single)value); } } if (type == ValueHandleType.Zero) { return(0); } if (type == ValueHandleType.One) { return(1); } if (type == ValueHandleType.Int8) { return(GetInt8()); } if (type == ValueHandleType.Int16) { return(GetInt16()); } if (type == ValueHandleType.UTF8) { return(XmlConverter.ToSingle(_bufferReader.Buffer, _offset, _length)); } return(XmlConverter.ToSingle(GetString())); }
public bool IsWhitespace() { switch (_type) { case ValueHandleType.UTF8: return(_bufferReader.IsWhitespaceUTF8(_offset, _length)); case ValueHandleType.Dictionary: return(_bufferReader.IsWhitespaceKey(_offset)); case ValueHandleType.Char: int ch = GetChar(); if (ch > char.MaxValue) { return(false); } return(XmlConverter.IsWhitespace((char)ch)); case ValueHandleType.EscapedUTF8: return(_bufferReader.IsWhitespaceUTF8(_offset, _length)); case ValueHandleType.Unicode: return(_bufferReader.IsWhitespaceUnicode(_offset, _length)); case ValueHandleType.True: case ValueHandleType.False: case ValueHandleType.Zero: case ValueHandleType.One: return(false); case ValueHandleType.ConstString: return(s_constStrings[_offset].Length == 0); default: return(_length == 0); } }
public string GetUnicodeString(int offset, int length) { return(XmlConverter.ToStringUnicode(_buffer, offset, length)); }
unsafe public bool Equals2(int offset1, int length1, string s2) { int byteLength = length1; int charLength = s2.Length; // N unicode chars will be represented in at least N bytes, but // no more than N * 3 bytes. If the byte count falls outside of this // range, then the strings cannot be equal. if (byteLength < charLength || byteLength > charLength * maxBytesPerChar) { return(false); } byte[] buffer = _buffer; if (length1 < 8) { int length = Math.Min(byteLength, charLength); int offset = offset1; for (int i = 0; i < length; i++) { byte b = buffer[offset + i]; if (b >= 0x80) { return(XmlConverter.ToString(buffer, offset1, length1) == s2); } if (s2[i] != (char)b) { return(false); } } return(byteLength == charLength); } else { int length = Math.Min(byteLength, charLength); fixed(byte *_pb = &buffer[offset1]) { byte *pb = _pb; byte *pbMax = pb + length; fixed(char *_pch = s2) { char *pch = _pch; // Try to do the fast comparison in ascii space int t = 0; while (pb < pbMax && *pb < 0x80) { t = *pb - (byte)*pch; // The code generated is better if we break out then return if (t != 0) { break; } pb++; pch++; } if (t != 0) { return(false); } if (pb == pbMax) { return(byteLength == charLength); } } } return(XmlConverter.ToString(buffer, offset1, length1) == s2); } }
public string GetString() { ValueHandleType type = _type; if (type == ValueHandleType.UTF8) { return(GetCharsText()); } switch (type) { case ValueHandleType.False: return("false"); case ValueHandleType.True: return("true"); case ValueHandleType.Zero: return("0"); case ValueHandleType.One: return("1"); case ValueHandleType.Int8: case ValueHandleType.Int16: case ValueHandleType.Int32: return(XmlConverter.ToString(ToInt())); case ValueHandleType.Int64: return(XmlConverter.ToString(GetInt64())); case ValueHandleType.UInt64: return(XmlConverter.ToString(GetUInt64())); case ValueHandleType.Single: return(XmlConverter.ToString(GetSingle())); case ValueHandleType.Double: return(XmlConverter.ToString(GetDouble())); case ValueHandleType.Decimal: return(XmlConverter.ToString(GetDecimal())); case ValueHandleType.DateTime: return(XmlConverter.ToString(ToDateTime())); case ValueHandleType.Empty: return(string.Empty); case ValueHandleType.UTF8: return(GetCharsText()); case ValueHandleType.Unicode: return(GetUnicodeCharsText()); case ValueHandleType.EscapedUTF8: return(GetEscapedCharsText()); case ValueHandleType.Char: return(GetCharText()); case ValueHandleType.Dictionary: return(GetDictionaryString().Value); case ValueHandleType.Base64: byte[] bytes = ToByteArray(); DiagnosticUtility.DebugAssert(bytes != null, ""); return(Base64Encoding.GetString(bytes, 0, bytes.Length)); case ValueHandleType.List: return(XmlConverter.ToString(ToList())); case ValueHandleType.UniqueId: return(XmlConverter.ToString(ToUniqueId())); case ValueHandleType.Guid: return(XmlConverter.ToString(ToGuid())); case ValueHandleType.TimeSpan: return(XmlConverter.ToString(ToTimeSpan())); case ValueHandleType.QName: return(GetQNameDictionaryText()); case ValueHandleType.ConstString: return(s_constStrings[_offset]); default: throw /*System.Runtime.Serialization.*/ DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException()); } }