Ejemplo n.º 1
0
        public override int Serialize(TSource source, SerializationContext context)
        {
            ulong value = GetValue(source);

            if (IsOptional && value == DefaultValue)
            {
                return(0);
            }
            return(WritePrefix(context)
                   + context.EncodeUInt64(value));
        }
Ejemplo n.º 2
0
        internal static int SerializeTimeSpan(TimeSpan timeSpan, SerializationContext context, bool lengthPrefixed)
        {
            TimeSpanScale scale;
            long value = timeSpan.Ticks;
            if (timeSpan == TimeSpan.MaxValue)
            {
                value = 1;
                scale = TimeSpanScale.MinMax;
            }
            else if (timeSpan == TimeSpan.MinValue)
            {
                value = -1;
                scale = TimeSpanScale.MinMax;
            }
            else if (value % TimeSpan.TicksPerDay == 0)
            {
                scale = TimeSpanScale.Days;
                value /= TimeSpan.TicksPerDay;
            }
            else if (value % TimeSpan.TicksPerHour == 0)
            {
                scale = TimeSpanScale.Hours;
                value /= TimeSpan.TicksPerHour;
            }
            else if (value % TimeSpan.TicksPerMinute == 0)
            {
                scale = TimeSpanScale.Minutes;
                value /= TimeSpan.TicksPerMinute;
            }
            else if (value % TimeSpan.TicksPerSecond == 0)
            {
                scale = TimeSpanScale.Seconds;
                value /= TimeSpan.TicksPerSecond;
            }
            else if (value % TimeSpan.TicksPerMillisecond == 0)
            {
                scale = TimeSpanScale.Milliseconds;
                value /= TimeSpan.TicksPerMillisecond;
            }
            else
            {
                scale = TimeSpanScale.Ticks;
            }

            int len = 0;
            ulong zig = SerializationContext.Zig(value);
            if (lengthPrefixed)
            {
                if (scale != TimeSpanScale.Days)
                {
                    len += 2;
                }
                if (zig != 0)
                {
                    len += 1 + SerializationContext.GetLength(zig);
                }
                context.WriteByte((byte)len);
                len = 1;
            }
            if (value != 0)
            {
                context.WriteByte((FieldTimeSpanValue << 3) | (int)WireType.Variant);
                len += 1 + context.EncodeUInt64(zig);
            }
            if (scale != TimeSpanScale.Days)
            {
                context.WriteByte((FieldTimeSpanScale << 3) | (int)WireType.Variant);
                len += 1 + context.EncodeInt32((int)scale);
            }
            return len;
        }
Ejemplo n.º 3
0
        internal static int SerializeTimeSpan(TimeSpan timeSpan, SerializationContext context, bool lengthPrefixed)
        {
            TimeSpanScale scale;
            long          value = timeSpan.Ticks;

            if (timeSpan == TimeSpan.MaxValue)
            {
                value = 1;
                scale = TimeSpanScale.MinMax;
            }
            else if (timeSpan == TimeSpan.MinValue)
            {
                value = -1;
                scale = TimeSpanScale.MinMax;
            }
            else if (value % TimeSpan.TicksPerDay == 0)
            {
                scale  = TimeSpanScale.Days;
                value /= TimeSpan.TicksPerDay;
            }
            else if (value % TimeSpan.TicksPerHour == 0)
            {
                scale  = TimeSpanScale.Hours;
                value /= TimeSpan.TicksPerHour;
            }
            else if (value % TimeSpan.TicksPerMinute == 0)
            {
                scale  = TimeSpanScale.Minutes;
                value /= TimeSpan.TicksPerMinute;
            }
            else if (value % TimeSpan.TicksPerSecond == 0)
            {
                scale  = TimeSpanScale.Seconds;
                value /= TimeSpan.TicksPerSecond;
            }
            else if (value % TimeSpan.TicksPerMillisecond == 0)
            {
                scale  = TimeSpanScale.Milliseconds;
                value /= TimeSpan.TicksPerMillisecond;
            }
            else
            {
                scale = TimeSpanScale.Ticks;
            }

            int   len = 0;
            ulong zig = SerializationContext.Zig(value);

            if (lengthPrefixed)
            {
                if (scale != TimeSpanScale.Days)
                {
                    len += 2;
                }
                if (zig != 0)
                {
                    len += 1 + SerializationContext.GetLength(zig);
                }
                context.WriteByte((byte)len);
                len = 1;
            }
            if (value != 0)
            {
                context.WriteByte((FieldTimeSpanValue << 3) | (int)WireType.Variant);
                len += 1 + context.EncodeUInt64(zig);
            }
            if (scale != TimeSpanScale.Days)
            {
                context.WriteByte((FieldTimeSpanScale << 3) | (int)WireType.Variant);
                len += 1 + context.EncodeInt32((int)scale);
            }
            return(len);
        }