예제 #1
0
        public override void Read(Stream stream)
        {
            _elementType = (SerializeTypeEnum)stream.ReadByte();
            var elementType = SerializeTypes.GetType(_elementType);

            _rank       = stream.ReadInt32();
            _dimensions = new int[_rank];
            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = stream.ReadInt32();
            }
            int currDim = 0;
            int count   = 1;
            var ind     = new int[_rank];

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            _values = new object[count];
            for (int i = 0; i < count; i++)
            {
                ind        = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                _values[i] = stream.ReadPrimitiveOrStringType(elementType);
            }
        }
예제 #2
0
        internal ArrayOfPrimitivesInfo(Array obj, ISerializationContext ctx)
            : base(obj, ctx)
        {
            _elementType = SerializeTypes.GetTypeEnum(obj.GetType().GetElementType());
            _rank        = obj.Rank;
            _dimensions  = new int[_rank];
            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = obj.GetLength(i);
            }
            int[] ind     = new int[_rank];
            int   currDim = 0;
            int   count   = 1;

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            this._values = new object[count];
            for (int i = 0; i < count; i++)
            {
                ind        = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                _values[i] = obj.GetValue(ind);
            }
        }
예제 #3
0
        public override void Read(Stream stream)
        {
            var assembly = stream.ReadString();
            var name     = stream.ReadString();

            _arrayType = Assembly.Load(assembly).GetType(name);

            _rank       = stream.ReadInt32();
            _dimensions = new int[_rank];
            int count = 1;

            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = stream.ReadInt32();
                count         *= _dimensions[i];
            }
            int currDim = 0;
            var ind     = new int[_rank];

            _elementsInfo = new List <ISerializeInstanceInfo>();
            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                var info = this.Context.GetUninitializedTypeInfo((SerializeTypeEnum)stream.ReadByte());
                info.Read(stream);
                _elementsInfo.Add(info);
            }
        }
예제 #4
0
        public override object Get(List <ISerializeInstanceInfo> instanceInfos)
        {
            var arr = Array.CreateInstance(SerializeTypes.GetType(_elementType), _dimensions);

            this.Instance = arr;
            int count = 1;
            var ind   = new int[_rank];

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            int currDim = 0;

            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                arr.SetValue(_values[i], ind);
            }
            return(arr);
        }
예제 #5
0
        public override object Get(List <ISerializeInstanceInfo> instanceInfos)
        {
            var objType = Assembly.Load(_arrayType.Assembly.FullName).GetType(_arrayType.FullName);
            var arr     = Array.CreateInstance(objType, _dimensions);

            this.Instance = arr;
            int currDim = 0;
            int count   = 1;
            var ind     = new int[_rank];

            for (int i = 0; i < _rank; i++)
            {
                count *= _dimensions[i];
            }
            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                arr.SetValue(_elementsInfo[i].Get(instanceInfos), ind);
            }
            return(arr);
        }
예제 #6
0
        internal ArrayOfByRefInfo(Array obj, ISerializationContext ctx)
            : base(obj, ctx)
        {
            _rank       = obj.Rank;
            _arrayType  = obj.GetType().GetElementType();
            _dimensions = new int[_rank];
            for (int i = 0; i < _rank; i++)
            {
                _dimensions[i] = obj.GetLength(i);
            }
            int[] ind     = new int[_rank];
            int   currDim = 0;
            int   count   = obj.Length;

            _elementsInfo = new List <ISerializeInstanceInfo>();
            for (int i = 0; i < count; i++)
            {
                ind = MySerializer.GetNewArrayIndexes(_rank, _dimensions, ind, ref currDim);
                _elementsInfo.Add(ctx.GetInstanceInfo(obj.GetValue(ind)));
            }
        }