Example #1
0
        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()));
        }
Example #2
0
        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()));
        }
Example #3
0
        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);
            }
        }
Example #4
0
 public string GetUnicodeString(int offset, int length)
 {
     return(XmlConverter.ToStringUnicode(_buffer, offset, length));
 }
Example #5
0
        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);
            }
        }
Example #6
0
        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());
            }
        }