createObject() public static method

public static createObject ( IoState state ) : IoCoroutine
state IoState
return IoCoroutine
Esempio n. 1
0
        static void Main()
        {
            // Test Fibers

            IoCoroutine[] coros = new IoCoroutine[1];

            for (int i = 0; i < coros.Length; i++)
            {
                coros[i]                      = IoCoroutine.createObject(IoCLI.state);
                coros[i].fiber                = new Fiber();
                coros[i].fiber.currentCoro    = coros[i];
                coros[i].fiber.uniqueId       = i;
                coros[i].fiber.currentRoutine = IoCLI.Recurse2(coros[i]);
                IoCLI.yieldingCoros.Add(coros[i]);
            }

            for (int j = 0; j < 5; j++)
            {
                foreach (IoCoroutine f in coros)
                {
                    IoCoroutine.slotResume(f, null, null);
                }
            }

            IoCLI.state.prompt(IoCLI.state);
        }
Esempio n. 2
0
        private static IEnumerator Recurse2(IoCoroutine f)
        {
            //yield return null; // just create and quit // 1

            //f.fiber.Yield(f);

            IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state);

            ccc.fiber             = new Fiber();
            ccc.fiber.currentCoro = ccc;
            //yield return
            ccc.fiber.currentRoutine = new FiberProc(IoCLI.Recurse3 /*(ccc)*/);
            if (coro.fiber.State == 4)
            {
                Console.WriteLine("Creation Error. Fiber Exceeds on Recurse 2 " + f.uniqueId);
                IoCLI.yieldingCoros.Remove(f);
                return(null);
            }
            ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42));
            ccc.rawSetRunLocals(IoCLI.state.core);
            ccc.rawSetRunMessage(IoCLI.state.nilMessage);
            ccc.rawSetRunTarget(ccc);
            IoCLI.yieldingCoros.Add(ccc);

            //Console.WriteLine("Coro2 " + f.uniqueId + " creates Coro3 + " + ccc.uniqueId);

            IoCLI.yieldingCoros.Remove(f);
            //yield return null; // 2

            return(null);
        }
Esempio n. 3
0
        static void Main()
        {
            // Test Fibers

            for (int i = 0; i < 400; i++)
            {
                IoCoroutine coro = IoCoroutine.createObject(IoCLI.state);
                coro.fiber                = new Fiber();
                coro.fiber.currentCoro    = coro;
                coro.fiber.uniqueId       = coro.uniqueId;
                coro.fiber.currentRoutine = new FiberProc(IoCLI.Recurse2 /*(coro)*/);
                if (coro.fiber.State == 4)
                {
                    Console.WriteLine("Creation Error. Fiber Exceeds on " + i);
                    break;
                }
                IoCLI.yieldingCoros.Add(coro);
                if (IoCLI.coro == null)
                {
                    IoCLI.coro = coro;
                }
            }

            while (true)
            {
                ArrayList al = new ArrayList();
                foreach (IoCoroutine coro in IoCLI.yieldingCoros)
                {
                    if (coro != null)
                    {
                        al.Add(coro);
                    }
                }
                if (al.Count == 0)
                {
                    break;
                }
                foreach (IoCoroutine coro in al)
                {
                    if (coro != null)
                    {
                        IoCoroutine.slotResume(coro, null, null);
                    }
                }
            }

            IoCLI.state.prompt(IoCLI.state);
        }
Esempio n. 4
0
        private static IEnumerator Recurse3(IoCoroutine f)
        {
            IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state);

            ccc.fiber                = new Fiber();
            ccc.fiber.currentCoro    = ccc;
            ccc.fiber.currentRoutine = IoCLI.Recurse4(ccc);
            ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42));
            ccc.rawSetRunLocals(IoCLI.state.core);
            ccc.rawSetRunMessage(IoCLI.state.nilMessage);
            ccc.rawSetRunTarget(ccc);
            IoCLI.yieldingCoros.Add(ccc);

            Console.WriteLine("Recurse3+" + i++);

            yield return(ccc);
        }
Esempio n. 5
0
        private static IEnumerator Recurse2(IoCoroutine f)
        {
            yield return(null); // just create and quit

            IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state);

            ccc.fiber                = new Fiber();
            ccc.fiber.currentCoro    = ccc;
            ccc.fiber.currentRoutine = IoCLI.Recurse3(ccc);
            ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42));
            ccc.rawSetRunLocals(IoCLI.state.core);
            ccc.rawSetRunMessage(IoCLI.state.nilMessage);
            ccc.rawSetRunTarget(ccc);
            IoCLI.yieldingCoros.Add(ccc);

            yield return(ccc);
        }
Esempio n. 6
0
        private static IEnumerator Recurse3(IoCoroutine f)
        {
            int i = 0;

            IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state);

            ccc.fiber             = new Fiber();
            ccc.fiber.currentCoro = ccc;
            //yield return
            ccc.fiber.currentRoutine = new FiberProc(IoCLI.Recurse4 /*(ccc)*/);
            if (coro.fiber.State == 4)
            {
                Console.WriteLine("Creation Error. Fiber Exceeds on Recurse 3 " + f.uniqueId);
                IoCLI.yieldingCoros.Remove(f);
                return(null);
            }
            ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42));
            ccc.rawSetRunLocals(IoCLI.state.core);
            ccc.rawSetRunMessage(IoCLI.state.nilMessage);
            ccc.rawSetRunTarget(ccc);
            IoCLI.yieldingCoros.Add(ccc);

            IoCLI.yieldingCorosCount++;

            //Console.WriteLine("Coro3 " + f.uniqueId + " creates Coro4 + " + ccc.uniqueId);

            while (i < 2)
            {
                // f.fiber.Yield(f);
                //Console.WriteLine("Recurse3 Fiber: " + f.uniqueId + " Iteration: " + i++);
                //yield return null;
                i++;
            }

            IoCLI.yieldingCoros.Remove(f);

            return(null);
        }