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 == null); // since replaces return(state.ReadUInt32()); }