Ejemplo n.º 1
0
        static IodineObject Filter(VirtualMachine vm, IodineObject self, IodineObject [] args)
        {
            if (args.Length == 0)
            {
                vm.RaiseException(new IodineArgumentException(1));
                return(null);
            }

            var list       = new IodineList(new IodineObject [] { });
            var collection = self.GetIterator(vm);

            IodineObject func = args [0];

            collection.IterReset(vm);

            while (collection.IterMoveNext(vm))
            {
                var o = collection.IterGetCurrent(vm);
                if (func.Invoke(vm, new IodineObject [] { o }).IsTrue())
                {
                    list.Add(o);
                }
            }
            return(list);
        }
Ejemplo n.º 2
0
        static IodineObject Reduce(VirtualMachine vm, IodineObject self, IodineObject [] args)
        {
            if (args.Length == 0)
            {
                vm.RaiseException(new IodineArgumentException(1));
                return(null);
            }

            var collection = self.GetIterator(vm);

            IodineObject result = args.Length > 1 ? args [0] : null;
            IodineObject func   = args.Length > 1 ? args [1] : args [0];

            collection.IterReset(vm);

            while (collection.IterMoveNext(vm))
            {
                var o = collection.IterGetCurrent(vm);

                if (result == null)
                {
                    result = o;
                }

                result = func.Invoke(vm, new IodineObject [] { result, o });
            }
            return(result);
        }
Ejemplo n.º 3
0
        static IodineObject Last(VirtualMachine vm, IodineObject self, IodineObject [] args)
        {
            IodineObject returnObject = IodineNull.Instance;

            if (args.Length > 0)
            {
                returnObject = args [0];
            }

            var iterator = self.GetIterator(vm);

            iterator.IterReset(vm);

            while (iterator.IterMoveNext(vm))
            {
                returnObject = iterator.IterGetCurrent(vm);
            }

            return(returnObject);
        }
Ejemplo n.º 4
0
        static IodineObject Each(VirtualMachine vm, IodineObject self, IodineObject [] args)
        {
            if (args.Length == 0)
            {
                vm.RaiseException(new IodineArgumentException(1));
                return(null);
            }

            var iterator = self.GetIterator(vm);

            iterator.IterReset(vm);

            while (iterator.IterMoveNext(vm))
            {
                var obj = iterator.IterGetCurrent(vm);

                args [0].Invoke(vm, new IodineObject [] { obj });
            }

            return(null);
        }