예제 #1
0
 internal static BlockExpression Block(Expression[] expressions)
 {
     if (expressions.Length == 0)
     {
         expressions = expressions.AddLast(Utils.Empty());
     }
     return(Expression.Block(expressions));
 }
예제 #2
0
        public void TestShrink()
        {
            var cap = 5;
            var arr = new Array <int>(cap);

            for (var i = 0; i < cap; i++)
            {
                arr.AddLast(i);
            }

            Assert.AreEqual(cap, arr.Capacity);

            arr.AddLast(100);
            Assert.Greater(arr.Capacity, cap);
            Console.WriteLine(arr);
            Console.WriteLine("Capacity = {0}", arr.Capacity);
        }
예제 #3
0
 internal static BlockExpression BlockVoid(Expression[] expressions)
 {
     if (expressions.Length == 0 || expressions[expressions.Length - 1].Type != typeof(void))
     {
         expressions = expressions.AddLast(Utils.Empty());
     }
     return(Expression.Block(expressions));
 }
예제 #4
0
        public void TestUpdate()
        {
            var arr = new Array <int>();

            arr.AddLast(1);
            arr.AddLast(2);
            arr.AddLast(3);
            Console.WriteLine(arr);

            arr[0] = 2;
            arr[1] = 3;
            arr[2] = 4;

            Console.WriteLine(arr);

            var expectedArr = new int[] { 2, 3, 4 };

            Assert.AreEqual(expectedArr.Length, arr.Size);
            for (var i = 0; i < expectedArr.Length; i++)
            {
                Assert.AreEqual(arr[i], expectedArr[i]);
            }
        }
예제 #5
0
 internal static Type MakeNewDelegate(Type[] types, Type returnType)
 {
     if (types.Length > MaximumArity || types.Any(t => t.IsByRef))
     {
         return(MakeNewCustomDelegate(types, returnType));
     }
     if (returnType == typeof(void))
     {
         return(GetActionType(types));
     }
     else
     {
         var result = types.AddLast(returnType);
         return(GetFuncType(result));
     }
 }
예제 #6
0
        public void TestAdd()
        {
            var arr = new Array <int>();

            arr.Add(0, 101);
            arr.AddFirst(9);
            arr.AddLast(200);
            arr.Add(0, 222);
            arr.Add(1, 555);
            Console.WriteLine(arr);

            var ret = new int[] { 222, 555, 9, 101, 200 };

            Assert.AreEqual(arr.Size, ret.Length);
            for (var i = 0; i < ret.Length; i++)
            {
                Assert.AreEqual(ret[i], arr[i]);
            }
        }
예제 #7
0
        public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
        {
            Requires.NotNull(binder);

            if (_self.TryGetSetItem(out ComMethodDesc setItem))
            {
                bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes);
                isByRef = isByRef.AddLast(false);

                DynamicMetaObject result = BindComInvoke(indexes.AddLast(value), setItem, binder.CallInfo, isByRef);

                // Make sure to return the value; some languages need it.
                return(new DynamicMetaObject(
                           Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))),
                           result.Restrictions
                           ));
            }

            return(base.BindSetIndex(binder, indexes, value));
        }
        private static T[] AddOrInsert(T[] rules, T item)
        {
            T[] localArray;
            if (rules.Length < 0x40)
            {
                return(rules.AddLast <T>(item));
            }
            int num = rules.Length + 1;

            if (num > 0x80)
            {
                num        = 0x80;
                localArray = rules;
            }
            else
            {
                localArray = new T[num];
            }
            Array.Copy(rules, 0, localArray, 0, 0x40);
            localArray[0x40] = item;
            Array.Copy(rules, 0x40, localArray, 0x41, (num - 0x40) - 1);
            return(localArray);
        }
예제 #9
0
        public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
        {
            IDispatchComObject target = _callable.DispatchComObject;
            string             name   = _callable.MemberName;

            bool holdsNull = value.Value == null && value.HasValue;

            if (target.TryGetPropertySetter(name, out ComMethodDesc method, value.LimitType, holdsNull) ||
                target.TryGetPropertySetterExplicit(name, out method, value.LimitType, holdsNull))
            {
                bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes);
                isByRef = isByRef.AddLast(false);
                DynamicMetaObject result = BindComInvoke(method, indexes.AddLast(value), binder.CallInfo, isByRef);

                // Make sure to return the value; some languages need it.
                return(new DynamicMetaObject(
                           Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))),
                           result.Restrictions
                           ));
            }

            return(base.BindSetIndex(binder, indexes, value));
        }
예제 #10
0
        public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
        {
            IDispatchComObject target = _callable.DispatchComObject;
            string             name   = _callable.MemberName;

            bool holdsNull = value.Value == null && value.HasValue;

            if (target.TryGetPropertySetter(name, out ComMethodDesc method, value.LimitType, holdsNull) ||
                target.TryGetPropertySetterExplicit(name, out method, value.LimitType, holdsNull))
            {
                List <ParameterExpression> temps     = new List <ParameterExpression>();
                List <Expression>          initTemps = new List <Expression>();

                bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(method, ref indexes, temps, initTemps);
                isByRef = isByRef.AddLast(false);
                // Convert the value to the target type
                DynamicMetaObject updatedValue = new DynamicMetaObject(
                    value.CastOrConvertMethodArgument(
                        value.LimitType,
                        name,
                        "SetIndex",
                        allowCastingToByRefLikeType: false,
                        temps,
                        initTemps),
                    value.Restrictions);

                var result = BindComInvoke(method, indexes.AddLast(updatedValue), binder.CallInfo, isByRef, temps, initTemps);

                // Make sure to return the value; some languages need it.
                return(new DynamicMetaObject(
                           Expression.Block(result.Expression, Expression.Convert(value.Expression, typeof(object))),
                           result.Restrictions
                           ));
            }

            return(base.BindSetIndex(binder, indexes, value));
        }
예제 #11
0
 public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
 {
     ContractUtils.RequiresNotNull(binder, "binder");
     return(binder.Defer(WrapSelf(), indexes.AddLast(value)));
 }
예제 #12
0
 public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
 {
     Requires.NotNull(binder, nameof(binder));
     return(binder.Defer(WrapSelf(), indexes.AddLast(value)));
 }
예제 #13
0
 public override MetaObject BindSetIndex(SetIndexBinder binder, MetaObject[] indexes, MetaObject value)
 {
     ContractUtils.RequiresNotNull(binder, "binder");
     return(IndexOperation(binder.FallbackSetIndex(UnwrapSelf(), indexes, value), indexes.AddLast(value), "TryGetSetItem"));
 }
예제 #14
0
 public void AddLastTest()
 {
     _array.AddLast(1);
     Assert.AreEqual(1, _array.GetSize());
 }
예제 #15
0
 public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
 {
     return(binder.Defer(WrapSelf(), indexes.AddLast(value)));
 }
예제 #16
0
 public void Enqueue(T t)
 {
     array.AddLast(t);
 }
예제 #17
0
 //添加一个元素
 public void Push(T e)
 {
     array.AddLast(e);
 }
예제 #18
0
 public void Insert(T element)
 {
     data.AddLast(element);
     SiftUp(data.GetSize() - 1);
 }