コード例 #1
0
        static public object GetBinaryTypeValue(IAnalyze analyze, BinaryTypeEnumeration binaryType)
        {
            object value = null;

            switch (binaryType)
            {
            case BinaryTypeEnumeration.Primitive:
                var temp = (PrimitiveTypeEnumeration)analyze.Reader.ReadByte();
                value = temp;

                if (temp == PrimitiveTypeEnumeration.String)
                {
                    throw new Exception();
                }
                break;

            case BinaryTypeEnumeration.SystemClass:
                //可能有问题
                value = new LengthPrefixedString(analyze);
                break;

            case BinaryTypeEnumeration.Class:
                value = new ClassTypeInfo(analyze);
                break;

            case BinaryTypeEnumeration.PrimitiveArray:
                value = (PrimitiveTypeEnumeration)analyze.Reader.ReadByte();
                break;
            }

            return(value);
        }
コード例 #2
0
 /// <summary>
 /// 检查是否符合 BinaryTypeEnumeration 的值
 /// </summary>
 /// <param name="value"></param>
 static public void IsBinaryTypeEnum(BinaryTypeEnumeration value)
 {
     if (value < BinaryTypeEnumeration.Primitive || value > BinaryTypeEnumeration.PrimitiveArray)
     {
         throw new RollBackException();
     }
 }
コード例 #3
0
        public MemberTypeInfo(IAnalyze analyze, int memberCount) : base(analyze)
        {
            BinaryTypeEnums = new BinaryTypeEnumeration[memberCount];
            AdditionalInfos = new object[memberCount];
            for (int i = 0; i < memberCount; i++)
            {
                var type = (BinaryTypeEnumeration)analyze.Reader.ReadByte();
                Assert.IsBinaryTypeEnum(type);

                BinaryTypeEnums[i] = type;
            }

            for (int i = 0; i < memberCount; i++)
            {
                object value = Common.GetBinaryTypeValue(analyze, BinaryTypeEnums[i]);
                AdditionalInfos[i] = value;
            }
        }
コード例 #4
0
ファイル: SerReader.cs プロジェクト: zippy1981/il-repack
 internal BinaryArray(BinaryTypeEnumeration type)
 {
     BinaryType = type;
     Rank       = 1;
 }
コード例 #5
0
ファイル: SerReader.cs プロジェクト: Fininvest/il-repack
 internal BinaryArray(BinaryTypeEnumeration type)
 {
     BinaryType = type;
     Rank = 1;
 }
コード例 #6
0
        public MemberTypeInfo(IParsingContext context, Int32 count)
        {
            BinaryTypeEnums = new BinaryTypeEnumeration[count];
            AdditionalInfos = new Object[count];

            for (var i = 0; i < count; ++i) {
                BinaryTypeEnums[i] = (BinaryTypeEnumeration)context.ReadByte();
            }

            for (var i = 0; i < count; ++i) {
                var binaryType = BinaryTypeEnums[i];
                switch (binaryType) {
                    case BinaryTypeEnumeration.String:
                    case BinaryTypeEnumeration.StringArray:
                    case BinaryTypeEnumeration.Object:
                    case BinaryTypeEnumeration.ObjectArray:
                        break;

                    case BinaryTypeEnumeration.Primitive:
                    case BinaryTypeEnumeration.PrimitiveArray:
                        AdditionalInfos[i] = (PrimitiveTypeEnumeration)context.ReadByte();
                        break;

                    case BinaryTypeEnumeration.SystemClass:
                        AdditionalInfos[i] = context.ReadString();
                        break;

                    case BinaryTypeEnumeration.Class:
                        AdditionalInfos[i] = new ClassTypeInfo(context);
                        break;

                    default:
                        throw new NotSupportedException("Unsupported BinaryType " + binaryType);
                }
            }
        }