Пример #1
0
        decimal ISerializer <decimal> .Read(ref ProtoReader.State state, decimal value)
        {
            ulong low       = 0;
            uint  high      = 0;
            uint  signScale = 0;
            int   fieldNumber;

            while ((fieldNumber = state.ReadFieldHeader()) > 0)
            {
                switch (fieldNumber)
                {
                case FieldDecimalLow: low = state.ReadUInt64(); break;

                case FieldDecimalHigh: high = state.ReadUInt32(); break;

                case FieldDecimalSignScale: signScale = state.ReadUInt32(); break;

                default: state.SkipField(); break;
                }
            }
            int lo     = (int)(low & 0xFFFFFFFFL),
                mid    = (int)((low >> 32) & 0xFFFFFFFFL),
                hi     = (int)high;
            bool isNeg = (signScale & 0x0001) == 0x0001;
            byte scale = (byte)((signScale & 0x01FE) >> 1);

            return(new decimal(lo, mid, hi, isNeg, scale));
        }
 public object Read(ref ProtoReader.State state, object value)
 {
     Debug.Assert(value is null); // since replaces
     return(state.ReadUInt64());
 }