1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
// This file is part of context-coroutine. It is subject to the license terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-coroutine/master/COPYRIGHT. No part of context-coroutine, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file. // Copyright © 2019 The developers of context-coroutine. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-coroutine/master/COPYRIGHT. #![allow(non_snake_case)] #![allow(non_upper_case_globals)] #![allow(non_camel_case_types)] #![deny(missing_docs)] #![deny(unreachable_patterns)] #![feature(allocator_api)] #![feature(asm)] #![feature(core_intrinsics)] #![feature(global_asm)] #![feature(naked_functions)] //! # context-coroutine //! //! Provides coroutines using the trait `Coroutine`. //! //! Coroutines use a separate, special stack. //! //! Implement this trait and then call `Coroutine::start_coroutine()`, passing in start arguments and a source of memory for the stack and heap. //! Coroutines can use a switchable allocator, providing a straightforward way to restrict the amount of dynamic memory they can access and to ensure they only use thread-local memory. //! //! For a simple coroutine, use the stack `stacks::ProtectedStack`. //! //! This crate was originally a simple set of extensions to the [context](https://github.com/zonyitoo/context-rs) crate to provide stackful coroutines. //! The developers are not associated with the authors of [context](https://github.com/zonyitoo/context-rs) but are extremely grateful for the work they've put into to a superb piece of code. //! //! //! ## Licensing //! //! The license for this project is MIT. extern crate context_allocator; extern crate libc; extern crate libc_extra; #[macro_use] extern crate likely; use self::context::*; use self::stacks::*; use ::context_allocator::*; use ::context_allocator::allocators::global::*; use ::context_allocator::extensions::*; use ::context_allocator::memory_sources::*; use ::context_allocator::memory_sources::arena_memory_source::*; use ::context_allocator::memory_sources::mmap::*; use ::std::alloc::AllocErr; use ::std::intrinsics::unreachable; use ::std::marker::PhantomData; use ::std::mem::uninitialized; use ::std::num::NonZeroUsize; use ::std::panic::*; use ::std::ptr::NonNull; use ::std::ptr::read; use ::std::thread; include!("ChildOutcome.rs"); include!("Coroutine.rs"); include!("CoroutineMemory.rs"); include!("CoroutineMemorySource.rs"); include!("CoroutineInstance.rs"); include!("ParentInstructingChild.rs"); include!("ResumeOutcome.rs"); include!("StartedCoroutineInstance.rs"); include!("StartOutcome.rs"); include!("Yielder.rs"); /// Context; derived from `Boost.Context` and [context-rs](https://github.com/zonyitoo/context-rs). /// /// Use the `TypeSafeTransfer` struct to work with contexts (or the lower-level `Transfer`). pub mod context; /// Stack implementations. pub mod stacks;