Example #1
0
        /// <summary>
        /// Parses a Guid from a protobuf stream
        /// </summary>
        public static Guid ReadGuid(ProtoReader source)
        {
            ulong        low = 0, high = 0;
            int          fieldNumber;
            SubItemToken token = ProtoReader.StartSubItem(source);

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

                case FieldGuidHigh: high = source.ReadUInt64(); break;

                default: source.SkipField(); break;
                }
            }
            ProtoReader.EndSubItem(token, source);
            if (low == 0 && high == 0)
            {
                return(Guid.Empty);
            }
            uint a = (uint)(low >> 32), b = (uint)low, c = (uint)(high >> 32), d = (uint)high;

            return(new Guid((int)b, (short)a, (short)(a >> 16),
                            (byte)d, (byte)(d >> 8), (byte)(d >> 16), (byte)(d >> 24),
                            (byte)c, (byte)(c >> 8), (byte)(c >> 16), (byte)(c >> 24)));
        }
Example #2
0
        /// <summary>
        /// Parses a decimal from a protobuf stream
        /// </summary>
        public static decimal ReadDecimal(ProtoReader reader, ref ProtoReader.State state)
        {
            ulong low       = 0;
            uint  high      = 0;
            uint  signScale = 0;

            int          fieldNumber;
            SubItemToken token = ProtoReader.StartSubItem(reader, ref state);

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

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

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

                default: reader.SkipField(ref state); break;
                }
            }
            ProtoReader.EndSubItem(token, reader, ref state);

            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));
        }
Example #3
0
        public static Guid ReadGuid(ProtoReader source)
        {
            ulong        num          = (ulong)0;
            ulong        num1         = (ulong)0;
            SubItemToken subItemToken = ProtoReader.StartSubItem(source);

            while (true)
            {
                int num2 = source.ReadFieldHeader();
                int num3 = num2;
                if (num2 <= 0)
                {
                    break;
                }
                switch (num3)
                {
                case 1:
                {
                    num = source.ReadUInt64();
                    continue;
                }

                case 2:
                {
                    num1 = source.ReadUInt64();
                    continue;
                }

                default:
                {
                    source.SkipField();
                    continue;
                }
                }
            }
            ProtoReader.EndSubItem(subItemToken, source);
            if (num == (long)0 && num1 == (long)0)
            {
                return(Guid.Empty);
            }
            uint num4 = (uint)(num >> 32);
            uint num5 = (uint)num;
            uint num6 = (uint)(num1 >> 32);
            uint num7 = (uint)num1;

            return(new Guid((int)num5, (short)num4, (short)(num4 >> 16), (byte)num7, (byte)(num7 >> 8), (byte)(num7 >> 16), (byte)(num7 >> 24), (byte)num6, (byte)(num6 >> 8), (byte)(num6 >> 16), (byte)(num6 >> 24)));
        }
Example #4
0
        public static decimal ReadDecimal(ProtoReader reader)
        {
            ulong        num          = (ulong)0;
            uint         num1         = 0;
            uint         num2         = 0;
            SubItemToken subItemToken = ProtoReader.StartSubItem(reader);

            while (true)
            {
                int num3 = reader.ReadFieldHeader();
                int num4 = num3;
                if (num3 <= 0)
                {
                    break;
                }
                switch (num4)
                {
                case 1:
                {
                    num = reader.ReadUInt64();
                    continue;
                }

                case 2:
                {
                    num1 = reader.ReadUInt32();
                    continue;
                }

                case 3:
                {
                    num2 = reader.ReadUInt32();
                    continue;
                }

                default:
                {
                    reader.SkipField();
                    continue;
                }
                }
            }
            ProtoReader.EndSubItem(subItemToken, reader);
            if (num == (long)0 && num1 == 0)
            {
                return(new decimal(0));
            }
            int  num5 = (int)(num & (ulong)-1);
            int  num6 = (int)(num >> 32 & (ulong)-1);
            int  num7 = (int)num1;
            bool flag = (num2 & 1) == 1;
            byte num8 = (byte)((num2 & 510) >> 1);

            return(new decimal(num5, num6, num7, flag, num8));
        }
Example #5
0
 static public int ReadUInt64(IntPtr l)
 {
     try {
         ProtoBuf.ProtoReader self = (ProtoBuf.ProtoReader)checkSelf(l);
         var ret = self.ReadUInt64();
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }
Example #6
0
        public static Guid ReadGuid(ProtoReader source)
        {
            ulong        num   = 0uL;
            ulong        num2  = 0uL;
            SubItemToken token = ProtoReader.StartSubItem(source);
            int          num3;

            while ((num3 = source.ReadFieldHeader()) > 0)
            {
                int num4 = num3;
                if (num4 != 1)
                {
                    if (num4 != 2)
                    {
                        source.SkipField();
                    }
                    else
                    {
                        num2 = source.ReadUInt64();
                    }
                }
                else
                {
                    num = source.ReadUInt64();
                }
            }
            ProtoReader.EndSubItem(token, source);
            if (num == 0uL && num2 == 0uL)
            {
                return(Guid.Empty);
            }
            uint num5 = (uint)(num >> 32);
            uint num6 = (uint)num;
            uint num7 = (uint)(num2 >> 32);
            uint num8 = (uint)num2;

            return(new Guid((int)num6, (short)num5, (short)(num5 >> 16), (byte)num8, (byte)(num8 >> 8), (byte)(num8 >> 16), (byte)(num8 >> 24), (byte)num7, (byte)(num7 >> 8), (byte)(num7 >> 16), (byte)(num7 >> 24)));
        }
Example #7
0
        public static Guid ReadGuid(ProtoReader source)
        {
            ulong        num   = 0uL;
            ulong        num2  = 0uL;
            SubItemToken token = ProtoReader.StartSubItem(source);
            int          num3;

            while ((num3 = source.ReadFieldHeader()) > 0)
            {
                switch (num3)
                {
                case 1:
                    num = source.ReadUInt64();
                    break;

                case 2:
                    num2 = source.ReadUInt64();
                    break;

                default:
                    source.SkipField();
                    break;
                }
            }
            ProtoReader.EndSubItem(token, source);
            if (num == 0L && num2 == 0L)
            {
                return(Guid.Empty);
            }
            uint num4 = (uint)(num >> 32);
            int  a    = (int)num;
            uint num5 = (uint)(num2 >> 32);
            uint num6 = (uint)num2;

            return(new Guid(a, (short)num4, (short)(num4 >> 16), (byte)num6, (byte)(num6 >> 8), (byte)(num6 >> 16), (byte)(num6 >> 24), (byte)num5, (byte)(num5 >> 8), (byte)(num5 >> 16), (byte)(num5 >> 24)));
        }
Example #8
0
        public static decimal ReadDecimal(ProtoReader reader)
        {
            ulong        num   = 0uL;
            uint         num2  = 0u;
            uint         num3  = 0u;
            SubItemToken token = ProtoReader.StartSubItem(reader);
            int          num4;

            while ((num4 = reader.ReadFieldHeader()) > 0)
            {
                switch (num4)
                {
                case 1:
                    num = reader.ReadUInt64();
                    break;

                case 2:
                    num2 = reader.ReadUInt32();
                    break;

                case 3:
                    num3 = reader.ReadUInt32();
                    break;

                default:
                    reader.SkipField();
                    break;
                }
            }
            ProtoReader.EndSubItem(token, reader);
            if (num == 0L && num2 == 0)
            {
                return(0m);
            }
            int  lo         = (int)(num & uint.MaxValue);
            int  mid        = (int)((num >> 32) & uint.MaxValue);
            int  hi         = (int)num2;
            bool isNegative = (num3 & 1) == 1;
            byte scale      = (byte)((num3 & 0x1FE) >> 1);

            return(new decimal(lo, mid, hi, isNegative, scale));
        }
Example #9
0
        public static decimal ReadDecimal(ProtoReader reader)
        {
            ulong        num   = 0uL;
            uint         num2  = 0u;
            uint         num3  = 0u;
            SubItemToken token = ProtoReader.StartSubItem(reader);
            int          num4;

            while ((num4 = reader.ReadFieldHeader()) > 0)
            {
                switch (num4)
                {
                case 1:
                    num = reader.ReadUInt64();
                    break;

                case 2:
                    num2 = reader.ReadUInt32();
                    break;

                case 3:
                    num3 = reader.ReadUInt32();
                    break;

                default:
                    reader.SkipField();
                    break;
                }
            }
            ProtoReader.EndSubItem(token, reader);
            if (num == 0uL && num2 == 0u)
            {
                return(0m);
            }
            int  num5 = (int)(num & (ulong)-1);
            int  num6 = (int)(num >> 32 & (ulong)-1);
            int  num7 = (int)num2;
            bool flag = (num3 & 1u) == 1u;
            byte b    = (byte)((num3 & 510u) >> 1);

            return(new decimal(num5, num6, num7, flag, b));
        }
Example #10
0
 public static decimal ReadDecimal(ProtoReader reader)
 {
     ulong num = 0uL;
     uint num2 = 0u;
     uint num3 = 0u;
     SubItemToken token = ProtoReader.StartSubItem(reader);
     int num4;
     while ((num4 = reader.ReadFieldHeader()) > 0)
     {
         switch (num4)
         {
         case 1:
             num = reader.ReadUInt64();
             break;
         case 2:
             num2 = reader.ReadUInt32();
             break;
         case 3:
             num3 = reader.ReadUInt32();
             break;
         default:
             reader.SkipField();
             break;
         }
     }
     ProtoReader.EndSubItem(token, reader);
     if (num == 0uL && num2 == 0u)
     {
         return 0m;
     }
     int lo = (int)(num & 0xFFFFFFFFL);
     int mid = (int)(num >> 32 & 0xFFFFFFFFL);
     int hi = (int)num2;
     bool isNegative = (num3 & 1u) == 1u;
     byte scale = (byte)((num3 & 510u) >> 1);
     return new decimal(lo, mid, hi, isNegative, scale);
 }
Example #11
0
 /// <summary>
 /// Parses a Guid from a protobuf stream
 /// </summary>
 public static Guid ReadGuid(ProtoReader source)
 {
     ulong low = 0, high = 0;
     int fieldNumber;
     SubItemToken token = ProtoReader.StartSubItem(source);
     while ((fieldNumber = source.ReadFieldHeader()) > 0)
     {
         switch (fieldNumber)
         {
             case FieldGuidLow: low = source.ReadUInt64(); break;
             case FieldGuidHigh: high = source.ReadUInt64(); break;
             default: source.SkipField(); break;
         }
     }
     ProtoReader.EndSubItem(token, source);
     if(low == 0 && high == 0) return Guid.Empty;
     uint a = (uint)(low >> 32), b = (uint)low, c = (uint)(high >> 32), d= (uint)high;
     return new Guid((int)b, (short)a, (short)(a >> 16), 
         (byte)d, (byte)(d >> 8), (byte)(d >> 16), (byte)(d >> 24),
         (byte)c, (byte)(c >> 8), (byte)(c >> 16), (byte)(c >> 24));
     
 }
Example #12
0
        /// <summary>
        /// Parses a decimal from a protobuf stream
        /// </summary>
        public static decimal ReadDecimal(ProtoReader reader)
        {
            ulong low = 0;
            uint high = 0;
            uint signScale = 0;

            int fieldNumber;
            SubItemToken token = ProtoReader.StartSubItem(reader);
            while ((fieldNumber = reader.ReadFieldHeader()) > 0)
            {
                switch (fieldNumber)
                {
                    case FieldDecimalLow: low = reader.ReadUInt64(); break;
                    case FieldDecimalHigh: high = reader.ReadUInt32(); break;
                    case FieldDecimalSignScale: signScale = reader.ReadUInt32(); break;
                    default: reader.SkipField(); break;
                }
                
            }
            ProtoReader.EndSubItem(token, reader);

            if (low == 0 && high == 0) return decimal.Zero;

            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);
        }
Example #13
0
 public static Guid ReadGuid(ProtoReader source)
 {
     ulong num = 0uL;
     ulong num2 = 0uL;
     SubItemToken token = ProtoReader.StartSubItem(source);
     int num3;
     while ((num3 = source.ReadFieldHeader()) > 0)
     {
         int num4 = num3;
         if (num4 != 1)
         {
             if (num4 != 2)
             {
                 source.SkipField();
             }
             else
             {
                 num2 = source.ReadUInt64();
             }
         }
         else
         {
             num = source.ReadUInt64();
         }
     }
     ProtoReader.EndSubItem(token, source);
     if (num == 0uL && num2 == 0uL)
     {
         return Guid.Empty;
     }
     uint num5 = (uint)(num >> 32);
     uint a = (uint)num;
     uint num6 = (uint)(num2 >> 32);
     uint num7 = (uint)num2;
     return new Guid((int)a, (short)num5, (short)(num5 >> 16), (byte)num7, (byte)(num7 >> 8), (byte)(num7 >> 16), (byte)(num7 >> 24), (byte)num6, (byte)(num6 >> 8), (byte)(num6 >> 16), (byte)(num6 >> 24));
 }
 object ReadField(ProtoReader reader, Type memberT, string sClassName, CLS_Environment environment)
 {
     if (memberT == typeof(int))
     {
         return reader.ReadInt32();
     }
     else if (memberT == typeof(uint))
     {
         return reader.ReadUInt32();
     }
     else if (memberT == typeof(bool))
     {
         return reader.ReadBoolean();
     }
     else if (memberT == typeof(byte))
     {
         return reader.ReadByte();
     }
     else if (memberT == typeof(sbyte))
     {
         return reader.ReadSByte();
     }
     else if (memberT == typeof(float))
     {
         return reader.ReadSingle();
     }
     else if (memberT == typeof(double))
     {
         return reader.ReadDouble();
     }
     else if (memberT == typeof(short))
     {
         return reader.ReadInt16();
     }
     else if (memberT == typeof(ushort))
     {
         return reader.ReadUInt16();
     }
     else if (memberT == typeof(long))
     {
         return reader.ReadInt64();
     }
     else if (memberT == typeof(ulong))
     {
         return reader.ReadUInt64();
     }
     else if (memberT == typeof(string))
     {
         return reader.ReadString();
     }
     else if (memberT == typeof(byte[]))
     {
         return ProtoReader.AppendBytes(null, reader);
     }
     else if (memberT == typeof(SInstance))
     {
         SubItemToken st = ProtoReader.StartSubItem(reader);
         CLS_Type_Class sClass = environment.GetTypeByKeywordQuiet(sClassName) as CLS_Type_Class;
         if (!sClass.compiled)
             RuntimeCompilerClass(sClassName);
         CLS_Content content = CLS_Content.NewContent(environment);
         CLS_Content.Value retVal = sClass.function.New(content, m_emptyParams);
         CLS_Content.PoolContent(content);
         SInstance sInstance = (SInstance)retVal.value;
         ReadSInstance(reader, sInstance, environment);
         ProtoReader.EndSubItem(st, reader);
         return sInstance;
     }
     else
     {
         throw new NotImplementedException("未实现类型: " + memberT);
     }
 }