[][src]Crate switcheroo

Switcheroo provides lightweight context switches in Rust.

It consists of two parts:

  1. A stack implementation (currently only providing a fixed 8Mb stack).
  2. A generator implementation.

Example

use switcheroo::stack::*;
use switcheroo::Generator;

fn  main() {
	let stack = EightMbStack::new().unwrap();
	let  mut add_one = Generator::new(stack, |yielder, mut input| {
		loop {
			if input ==  0 {
				break;
			}
			input = yielder.suspend(input +  1);
		}
	});

	assert_eq!(add_one.resume(2), Some(3));
	assert_eq!(add_one.resume(127), Some(128));
	assert_eq!(add_one.resume(0), None);
	assert_eq!(add_one.resume(0), None);
}

Modules

stack

Different stack implementations (currently only contains a 8 Mb stack).

Structs

Generator

Generator wraps a closure and allows suspending its execution more than once, returning a value each time.

Yielder

Yielder is an interface provided to every generator through which it returns a value.