Exemplo n.º 1
0
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            SubItemToken  token = ProtoReader.StartSubItem(source);
            int           fieldNumber;
            TimeSpanScale scale = TimeSpanScale.Days;
            long          value = 0;

            while ((fieldNumber = source.ReadFieldHeader()) > 0)
            {
                switch (fieldNumber)
                {
                case FieldTimeSpanScale:
                    scale = (TimeSpanScale)source.ReadInt32();
                    break;

                case FieldTimeSpanValue:
                    source.Assert(WireType.SignedVariant);
                    value = source.ReadInt64();
                    break;

                default:
                    source.SkipField();
                    break;
                }
            }
            ProtoReader.EndSubItem(token, source);
            switch (scale)
            {
            case TimeSpanScale.Days:
                return(value * TimeSpan.TicksPerDay);

            case TimeSpanScale.Hours:
                return(value * TimeSpan.TicksPerHour);

            case TimeSpanScale.Minutes:
                return(value * TimeSpan.TicksPerMinute);

            case TimeSpanScale.Seconds:
                return(value * TimeSpan.TicksPerSecond);

            case TimeSpanScale.Milliseconds:
                return(value * TimeSpan.TicksPerMillisecond);

            case TimeSpanScale.Ticks:
                return(value);

            case TimeSpanScale.MinMax:
                switch (value)
                {
                case 1: return(long.MaxValue);

                case -1: return(long.MinValue);

                default: throw new ProtoException("Unknown min/max value: " + value.ToString());
                }

            default:
                throw new ProtoException("Unknown timescale: " + scale.ToString());
            }
        }
Exemplo n.º 2
0
        ScaledTicks ISerializer <ScaledTicks> .Read(ref ProtoReader.State state, ScaledTicks _)
        {
            int           fieldNumber;
            TimeSpanScale scale = TimeSpanScale.Days;
            long          value = 0;
            var           kind  = DateTimeKind.Unspecified;

            while ((fieldNumber = state.ReadFieldHeader()) > 0)
            {
                switch (fieldNumber)
                {
                case ScaledTicks.FieldTimeSpanScale:
                    scale = (TimeSpanScale)state.ReadInt32();
                    break;

                case ScaledTicks.FieldTimeSpanValue:
                    state.Assert(WireType.SignedVarint);
                    value = state.ReadInt64();
                    break;

                case ScaledTicks.FieldTimeSpanKind:
                    kind = (DateTimeKind)state.ReadInt32();
                    switch (kind)
                    {
                    case DateTimeKind.Unspecified:
                    case DateTimeKind.Utc:
                    case DateTimeKind.Local:
                        break;         // fine

                    default:
                        ThrowHelper.ThrowProtoException("Invalid date/time kind: " + kind.ToString());
                        break;
                    }
                    break;

                default:
                    state.SkipField();
                    break;
                }
            }
            return(new ScaledTicks(value, scale, kind));
        }
Exemplo n.º 3
0
        private static long ReadTimeSpanTicks(ProtoReader source, out DateTimeKind kind)
        {
            kind = DateTimeKind.Unspecified;
            switch (source.WireType)
            {
            case WireType.String:
            case WireType.StartGroup:
                SubItemToken  token = ProtoReader.StartSubItem(source);
                int           fieldNumber;
                TimeSpanScale scale = TimeSpanScale.Days;
                long          value = 0;
                while ((fieldNumber = source.ReadFieldHeader()) > 0)
                {
                    switch (fieldNumber)
                    {
                    case FieldTimeSpanScale:
                        scale = (TimeSpanScale)source.ReadInt32();
                        break;

                    case FieldTimeSpanValue:
                        source.Assert(WireType.SignedVariant);
                        value = source.ReadInt64();
                        break;

                    case FieldTimeSpanKind:
                        kind = (DateTimeKind)source.ReadInt32();
                        switch (kind)
                        {
                        case DateTimeKind.Unspecified:
                        case DateTimeKind.Utc:
                        case DateTimeKind.Local:
                            break;             // fine

                        default:
                            throw new ProtoException("Invalid date/time kind: " + kind.ToString());
                        }
                        break;

                    default:
                        source.SkipField();
                        break;
                    }
                }
                ProtoReader.EndSubItem(token, source);
                switch (scale)
                {
                case TimeSpanScale.Days:
                    return(value * TimeSpan.TicksPerDay);

                case TimeSpanScale.Hours:
                    return(value * TimeSpan.TicksPerHour);

                case TimeSpanScale.Minutes:
                    return(value * TimeSpan.TicksPerMinute);

                case TimeSpanScale.Seconds:
                    return(value * TimeSpan.TicksPerSecond);

                case TimeSpanScale.Milliseconds:
                    return(value * TimeSpan.TicksPerMillisecond);

                case TimeSpanScale.Ticks:
                    return(value);

                case TimeSpanScale.MinMax:
                    switch (value)
                    {
                    case 1: return(long.MaxValue);

                    case -1: return(long.MinValue);

                    default: throw new ProtoException("Unknown min/max value: " + value.ToString());
                    }

                default:
                    throw new ProtoException("Unknown timescale: " + scale.ToString());
                }

            case WireType.Fixed64:
                return(source.ReadInt64());

            default:
                throw new ProtoException("Unexpected wire-type: " + source.WireType.ToString());
            }
        }
Exemplo n.º 4
0
 public ScaledTicks(long value, TimeSpanScale scale, DateTimeKind kind)
 {
     Value = value;
     Scale = scale;
     Kind  = kind;
 }
Exemplo n.º 5
0
        private static long DeserializeTicks(SerializationContext context)
        {
            long          value = 0;
            TimeSpanScale scale = TimeSpanScale.Days;

            uint prefix;
            bool keepRunning = true;

            while (keepRunning && context.TryReadFieldPrefix(out prefix))
            {
                switch (prefix)
                {
                case (FieldTimeSpanScale << 3) | (int)WireType.Variant:
                    scale = (TimeSpanScale)context.DecodeInt32();
                    break;

                case (FieldTimeSpanValue << 3) | (int)WireType.Variant:
                    value = SerializationContext.Zag(context.DecodeUInt64());
                    break;

                default:
                    WireType wireType;
                    int      fieldTag;
                    Serializer.ParseFieldToken(prefix, out wireType, out fieldTag);
                    if (wireType == WireType.EndGroup)
                    {
                        context.EndGroup(fieldTag);
                        keepRunning = false;
                        continue;
                    }
                    switch (fieldTag)
                    {
                    case FieldTimeSpanScale:
                    case FieldTimeSpanValue:
                        throw new ProtoException("Incorrect wire-type deserializing TimeSpan");

                    default:
                        Serializer.SkipData(context, fieldTag, wireType);
                        break;
                    }
                    break;
                }
            }

            switch (scale)
            {
            case TimeSpanScale.Days:
                return(value * TimeSpan.TicksPerDay);

            case TimeSpanScale.Hours:
                return(value * TimeSpan.TicksPerHour);

            case TimeSpanScale.Minutes:
                return(value * TimeSpan.TicksPerMinute);

            case TimeSpanScale.Seconds:
                return(value * TimeSpan.TicksPerSecond);

            case TimeSpanScale.Milliseconds:
                return(value * TimeSpan.TicksPerMillisecond);

            case TimeSpanScale.Ticks:
                return(value);

            case TimeSpanScale.MinMax:
                switch (value)
                {
                case 1: return(long.MaxValue);

                case -1: return(long.MinValue);

                default: throw new ProtoException("Unknown min/max value: " + value.ToString());
                }

            default:
                throw new ProtoException("Unknown timescale: " + scale.ToString());
            }
        }
Exemplo n.º 6
0
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            switch (source.WireType)
            {
            case WireType.String:
            case WireType.StartGroup:
            {
                SubItemToken  token         = ProtoReader.StartSubItem(source);
                TimeSpanScale timeSpanScale = TimeSpanScale.Days;
                long          num           = 0L;
                int           num2;
                while ((num2 = source.ReadFieldHeader()) > 0)
                {
                    switch (num2)
                    {
                    case 2:
                        timeSpanScale = (TimeSpanScale)source.ReadInt32();
                        break;

                    case 1:
                        source.Assert(WireType.SignedVariant);
                        num = source.ReadInt64();
                        break;

                    default:
                        source.SkipField();
                        break;
                    }
                }
                ProtoReader.EndSubItem(token, source);
                switch (timeSpanScale)
                {
                case TimeSpanScale.Days:
                    return(num * 864000000000L);

                case TimeSpanScale.Hours:
                    return(num * 36000000000L);

                case TimeSpanScale.Minutes:
                    return(num * 600000000);

                case TimeSpanScale.Seconds:
                    return(num * 10000000);

                case TimeSpanScale.Milliseconds:
                    return(num * 10000);

                case TimeSpanScale.Ticks:
                    return(num);

                case TimeSpanScale.MinMax:
                    switch (num)
                    {
                    case 1L:
                        return(long.MaxValue);

                    case -1L:
                        return(long.MinValue);

                    default:
                        throw new ProtoException("Unknown min/max value: " + num);
                    }

                default:
                    throw new ProtoException("Unknown timescale: " + timeSpanScale);
                }
            }

            case WireType.Fixed64:
                return(source.ReadInt64());

            default:
                throw new ProtoException("Unexpected wire-type: " + source.WireType);
            }
        }
Exemplo n.º 7
0
        // Token: 0x06003269 RID: 12905 RVA: 0x001266EC File Offset: 0x00124AEC
        private static long ReadTimeSpanTicks(ProtoReader source, out DateTimeKind kind)
        {
            kind = DateTimeKind.Unspecified;
            switch (source.WireType)
            {
            case WireType.Fixed64:
                return(source.ReadInt64());

            case WireType.String:
            case WireType.StartGroup:
            {
                SubItemToken  token         = ProtoReader.StartSubItem(source);
                TimeSpanScale timeSpanScale = TimeSpanScale.Days;
                long          num           = 0L;
                int           num2;
                while ((num2 = source.ReadFieldHeader()) > 0)
                {
                    switch (num2)
                    {
                    case 1:
                        source.Assert(WireType.SignedVariant);
                        num = source.ReadInt64();
                        break;

                    case 2:
                        timeSpanScale = (TimeSpanScale)source.ReadInt32();
                        break;

                    case 3:
                        kind = (DateTimeKind)source.ReadInt32();
                        switch (kind)
                        {
                        case DateTimeKind.Unspecified:
                        case DateTimeKind.Utc:
                        case DateTimeKind.Local:
                            break;

                        default:
                            throw new ProtoException("Invalid date/time kind: " + kind.ToString());
                        }
                        break;

                    default:
                        source.SkipField();
                        break;
                    }
                }
                ProtoReader.EndSubItem(token, source);
                switch (timeSpanScale)
                {
                case TimeSpanScale.Days:
                    return(num * 864000000000L);

                case TimeSpanScale.Hours:
                    return(num * 36000000000L);

                case TimeSpanScale.Minutes:
                    return(num * 600000000L);

                case TimeSpanScale.Seconds:
                    return(num * 10000000L);

                case TimeSpanScale.Milliseconds:
                    return(num * 10000L);

                case TimeSpanScale.Ticks:
                    return(num);

                default:
                    if (timeSpanScale != TimeSpanScale.MinMax)
                    {
                        throw new ProtoException("Unknown timescale: " + timeSpanScale.ToString());
                    }
                    if (num == 1L)
                    {
                        return(long.MaxValue);
                    }
                    if (num != -1L)
                    {
                        throw new ProtoException("Unknown min/max value: " + num.ToString());
                    }
                    return(long.MinValue);
                }
            }

            default:
                throw new ProtoException("Unexpected wire-type: " + source.WireType.ToString());
            }
        }
Exemplo n.º 8
0
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            WireType wireType = source.WireType;

            if (wireType != WireType.Fixed64)
            {
                if ((uint)(wireType - 2) <= 1u)
                {
                    SubItemToken  token         = ProtoReader.StartSubItem(source);
                    TimeSpanScale timeSpanScale = TimeSpanScale.Days;
                    long          num           = 0L;
                    int           num2;
                    while ((num2 = source.ReadFieldHeader()) > 0)
                    {
                        switch (num2)
                        {
                        case 2:
                            timeSpanScale = (TimeSpanScale)source.ReadInt32();
                            break;

                        case 1:
                            source.Assert(WireType.SignedVariant);
                            num = source.ReadInt64();
                            break;

                        default:
                            source.SkipField();
                            break;
                        }
                    }
                    ProtoReader.EndSubItem(token, source);
                    switch (timeSpanScale)
                    {
                    case TimeSpanScale.Days:
                        return(num * 864000000000L);

                    case TimeSpanScale.Hours:
                        return(num * 36000000000L);

                    case TimeSpanScale.Minutes:
                        return(num * 600000000);

                    case TimeSpanScale.Seconds:
                        return(num * 10000000);

                    case TimeSpanScale.Milliseconds:
                        return(num * 10000);

                    case TimeSpanScale.Ticks:
                        return(num);

                    case TimeSpanScale.MinMax:
                        switch (num)
                        {
                        case 1L:
                            return(9223372036854775807L);

                        case -1L:
                            return(-9223372036854775808L);

                        default:
                            throw new ProtoException("Unknown min/max value: " + num.ToString());
                        }

                    default:
                        throw new ProtoException("Unknown timescale: " + timeSpanScale.ToString());
                    }
                }
                wireType = source.WireType;
                throw new ProtoException("Unexpected wire-type: " + wireType.ToString());
            }
            return(source.ReadInt64());
        }
Exemplo n.º 9
0
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            TimeSpanScale timeSpanScale;

            switch (source.WireType)
            {
            case WireType.Fixed64:
            {
                return(source.ReadInt64());
            }

            case WireType.String:
            case WireType.StartGroup:
            {
                SubItemToken subItemToken = ProtoReader.StartSubItem(source);
                timeSpanScale = TimeSpanScale.Days;
                long num = (long)0;
                while (true)
                {
                    int num1 = source.ReadFieldHeader();
                    int num2 = num1;
                    if (num1 <= 0)
                    {
                        break;
                    }
                    switch (num2)
                    {
                    case 1:
                    {
                        source.Assert(WireType.SignedVariant);
                        num = source.ReadInt64();
                        continue;
                    }

                    case 2:
                    {
                        timeSpanScale = (TimeSpanScale)source.ReadInt32();
                        continue;
                    }

                    default:
                    {
                        source.SkipField();
                        continue;
                    }
                    }
                }
                ProtoReader.EndSubItem(subItemToken, source);
                TimeSpanScale timeSpanScale1 = timeSpanScale;
                switch (timeSpanScale1)
                {
                case TimeSpanScale.Days:
                {
                    return(num * 864000000000L);
                }

                case TimeSpanScale.Hours:
                {
                    return(num * 36000000000L);
                }

                case TimeSpanScale.Minutes:
                {
                    return(num * (long)600000000);
                }

                case TimeSpanScale.Seconds:
                {
                    return(num * (long)10000000);
                }

                case TimeSpanScale.Milliseconds:
                {
                    return(num * (long)10000);
                }

                case TimeSpanScale.Ticks:
                {
                    return(num);
                }

                default:
                {
                    if (timeSpanScale1 == TimeSpanScale.MinMax)
                    {
                        break;
                    }
                    else
                    {
                        throw new ProtoException(string.Concat("Unknown timescale: ", timeSpanScale.ToString()));
                    }
                }
                }
                long num3 = num;
                if (num3 <= (long)1 && num3 >= (long)-1)
                {
                    switch ((int)(num3 - (long)-1))
                    {
                    case 0:
                    {
                        return(-9223372036854775808L);
                    }

                    case 2:
                    {
                        return(9223372036854775807L);
                    }
                    }
                }
                throw new ProtoException(string.Concat("Unknown min/max value: ", num.ToString()));
            }
            }
            throw new ProtoException(string.Concat("Unexpected wire-type: ", source.WireType.ToString()));
            throw new ProtoException(string.Concat("Unknown timescale: ", timeSpanScale.ToString()));
        }
Exemplo n.º 10
0
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            switch (source.WireType)
            {
            case WireType.Fixed64:
                return(source.ReadInt64());

            case WireType.String:
            case WireType.StartGroup:
            {
                SubItemToken  token         = ProtoReader.StartSubItem(source);
                TimeSpanScale timeSpanScale = TimeSpanScale.Days;
                long          num           = 0L;
                int           num2;
                while ((num2 = source.ReadFieldHeader()) > 0)
                {
                    int num3 = num2;
                    if (num3 != 1)
                    {
                        if (num3 != 2)
                        {
                            source.SkipField();
                        }
                        else
                        {
                            timeSpanScale = (TimeSpanScale)source.ReadInt32();
                        }
                    }
                    else
                    {
                        source.Assert(WireType.SignedVariant);
                        num = source.ReadInt64();
                    }
                }
                ProtoReader.EndSubItem(token, source);
                TimeSpanScale timeSpanScale2 = timeSpanScale;
                switch (timeSpanScale2)
                {
                case TimeSpanScale.Days:
                    return(num * 864000000000L);

                case TimeSpanScale.Hours:
                    return(num * 36000000000L);

                case TimeSpanScale.Minutes:
                    return(num * 600000000L);

                case TimeSpanScale.Seconds:
                    return(num * 10000000L);

                case TimeSpanScale.Milliseconds:
                    return(num * 10000L);

                case TimeSpanScale.Ticks:
                    return(num);

                default:
                {
                    if (timeSpanScale2 != TimeSpanScale.MinMax)
                    {
                        throw new ProtoException("Unknown timescale: " + timeSpanScale.ToString());
                    }
                    long num4 = num;
                    if (num4 >= -1L && num4 <= 1L)
                    {
                        switch ((int)(num4 - -1L))
                        {
                        case 0:
                            return(-9223372036854775808L);

                        case 2:
                            return(9223372036854775807L);
                        }
                    }
                    throw new ProtoException("Unknown min/max value: " + num.ToString());
                }
                }
                break;
            }

            default:
                throw new ProtoException("Unexpected wire-type: " + source.WireType.ToString());
            }
        }
Exemplo n.º 11
0
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            long num2;

            switch (source.WireType)
            {
            case WireType.Fixed64:
                return(source.ReadInt64());

            case WireType.String:
            case WireType.StartGroup:
            {
                int           num;
                SubItemToken  token = ProtoReader.StartSubItem(source);
                TimeSpanScale days  = TimeSpanScale.Days;
                num2 = 0L;
Label_0065:
                if ((num = source.ReadFieldHeader()) <= 0)
                {
                    ProtoReader.EndSubItem(token, source);
                    switch (days)
                    {
                    case TimeSpanScale.Days:
                        return(num2 * 0xc92a69c000L);

                    case TimeSpanScale.Hours:
                        return(num2 * 0x861c46800L);

                    case TimeSpanScale.Minutes:
                        return(num2 * 0x23c34600L);

                    case TimeSpanScale.Seconds:
                        return(num2 * 0x989680L);

                    case TimeSpanScale.Milliseconds:
                        return(num2 * 0x2710L);

                    case TimeSpanScale.Ticks:
                        return(num2);

                    case TimeSpanScale.MinMax:
                    {
                        long num4 = num2;
                        if ((num4 <= 1L) && (num4 >= -1L))
                        {
                            switch (((int)(num4 - -1L)))
                            {
                            case 0:
                                return(-9223372036854775808L);

                            case 2:
                                return(0x7fffffffffffffffL);
                            }
                        }
                        goto Label_0115;
                    }
                    }
                    throw new ProtoException("Unknown timescale: " + days.ToString());
                }
                switch (num)
                {
                case 1:
                    source.Assert(WireType.SignedVariant);
                    num2 = source.ReadInt64();
                    goto Label_0065;

                case 2:
                    days = (TimeSpanScale)source.ReadInt32();
                    goto Label_0065;
                }
                source.SkipField();
                goto Label_0065;
            }

            default:
                throw new ProtoException("Unexpected wire-type: " + source.WireType.ToString());
            }
Label_0115:
            throw new ProtoException("Unknown min/max value: " + num2.ToString());
        }
Exemplo n.º 12
0
        // Token: 0x06000039 RID: 57 RVA: 0x0000A274 File Offset: 0x00008474
        private static long ReadTimeSpanTicks(ProtoReader source)
        {
            WireType wireType = source.WireType;

            if (wireType == WireType.Fixed64)
            {
                return(source.ReadInt64());
            }
            if (wireType - WireType.String > 1)
            {
                throw new ProtoException("Unexpected wire-type: " + source.WireType.ToString());
            }
            SubItemToken  token         = ProtoReader.StartSubItem(source);
            TimeSpanScale timeSpanScale = TimeSpanScale.Days;
            long          num           = 0L;
            int           num2;

            while ((num2 = source.ReadFieldHeader()) > 0)
            {
                if (num2 != 1)
                {
                    if (num2 == 2)
                    {
                        timeSpanScale = (TimeSpanScale)source.ReadInt32();
                    }
                    else
                    {
                        source.SkipField();
                    }
                }
                else
                {
                    source.Assert(WireType.SignedVariant);
                    num = source.ReadInt64();
                }
            }
            ProtoReader.EndSubItem(token, source);
            switch (timeSpanScale)
            {
            case TimeSpanScale.Days:
                return(num * 864000000000L);

            case TimeSpanScale.Hours:
                return(num * 36000000000L);

            case TimeSpanScale.Minutes:
                return(num * 600000000L);

            case TimeSpanScale.Seconds:
                return(num * 10000000L);

            case TimeSpanScale.Milliseconds:
                return(num * 10000L);

            case TimeSpanScale.Ticks:
                return(num);

            default:
                if (timeSpanScale != TimeSpanScale.MinMax)
                {
                    throw new ProtoException("Unknown timescale: " + timeSpanScale.ToString());
                }
                if (num == -1L)
                {
                    return(long.MinValue);
                }
                if (num == 1L)
                {
                    return(long.MaxValue);
                }
                throw new ProtoException("Unknown min/max value: " + num.ToString());
            }
        }