Giter Club home page Giter Club logo

fastcoroutine's Introduction

fastcoroutine

Extremely lightweight x86-64 coroutine implementation.

Currently implements an enumerator style coroutine interface:

void TestEnumeratorCoroutine(YieldBuffer<int> &out)
{
  int i = 1;
  do
  {
    i <<= 1;
    out.YieldReturn(i);
  }
  while (i < (1<<20));
}

void Test()
{
  for (Enumerator<int> enumerator(TestEnumeratorCoroutine); enumerator.Next(); )
  {
    std::cout << enumerator.GetYield() << std::endl;
  }
}

A coroutine allows you to "return" a value in the middle of a function, then continue execution and possibly return an unlimited number of values. The term yield used to describe this special type of returning a value.

Your coroutine must have one parameter of type YieldBuffer<T> &, where T is the type of object yielded from the enumerator.

Constructing an Enumerator<T> prepares the coroutine for execution, but does not start executing it.

The Next() method transfers control to the coroutine, and execution continues until a value is yielded or the coroutine returns.

When a value is yielded the coroutine context is saved, the owner's context is restored, and the call to Next() returns.

The return value from Next() is designed for use in for loops. It returns true if there may be more objects yielded, and false when the coroutine has completed.

If the last call to Next() returned true, then calling GetYield() will return a reference to the last object yielded by the coroutine.

If you destruct an Enumerator before the coroutine runs to completion, control will be transferred back to the coroutine, and a CoroutineCanceled exception will be thrown. This exception will be caught and handled by this library, and control will be returned to the Enumerator<T> destructor.

fastcoroutine's People

Contributors

doug65536 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.