C++ Coroutine in Action.
- Help understanding of the C++ coroutine
- Provide meaningful design example with the feature
In that perspective, the library will be maintained as small as possible. Have fun with them. And try your own coroutines !
- Start with the wiki. You will visit the test/ and interface/ folder while reading the docs.
- This repository has some custom implementation for the C++ Coroutine spec in the
<coroutine/frame.h>
This library is for x64.
- Visual Studio 2017 or later
msvc
(vc141, vc142)
- CMake
msvc
clang-cl
: Works with VC++ headers. Requires static linkingclang
: LinuxAppleClang
: Mac
For clang users, I do recommend Clang 6.0 or later versions.
To support multiple compilers, this library defines its own header, <coroutine/frame.h>
. This might lead to conflict with existing library (libc++ and VC++).
If there is a collision(build issue), please make an issue in this repo so I can fix it.
// This header includes/overrides <experimental/coroutine>
#include <coroutine/frame.h>
Generator and async generator
#include <coroutine/yield.hpp> // enumerable<T> & sequence<T>
Utility types are in the following headers
#include <coroutine/return.h> // return type examples for convenience
#include <coroutine/concrt.h> // concurrency utilities over system API
Go language style channel to deliver data between coroutines. Supports awaitable read/write and select operation are possible. But it is slightly differnt from that of Go language.
#include <coroutine/channel.hpp> // channel<T, Lockable>
Network Asnyc I/O and some helper functions are placed in one header.
#include <coroutine/net.h> // async i/o for sockets
Please reference the build configurations.
Create an issue if you think another configuration is required.
- Azure Pipelines
- Visual Studio 2017 (Visual Studio Solution File)
- Visual Studio 2017 (CMake)
- Ubuntu 16.04 + Clang 6.0
- Mac OS + AppleClang
- Windows + Clang-cl
.travis.yml
- Mac OS + AppleClang
- Ubuntu 16.04 + Clang 7
- iPhone OS : leetal/ios-cmake
- Android NDK (SDK 24 - 27) + Clang 8
appveyor.yml
- Visual Studio 2017 (Visual Studio Solution File)
- Windows + Clang-cl : LLVM chocolatey package
- Works on my machine :D
- Visual Studio 2019
- Windows Subsystem for Linux (Ubuntu 18.04 + Clang 7.1.0)
- Clang-cl (LLVM 7.0.1, 8.0) + Ninja
Exploring test(example) codes will be helpful. The library uses 2 tools for its test.
- Visual Studio Native Testing Tool
- CMake generated project with Catch2
For Visual Studio users,
I recommend you to import(add reference) windows.vcxproj in modules.
Expect there is a higher CMake project which uses this library. For Android NDK, the minimum version of CMake is 3.14.
cmake_minimum_required(VERSION 3.8) # Android NDK requires 3.14
# ...
add_subdirectory(coroutine)
# ...
target_link_libraries(your_project
PUBLIC
coroutine
)
Following package managers and build options are available.
- vcpkg
- x64-windows
- x64-linux
- x64-osx
This work is licensed under a Creative Commons Attribution 4.0 International License.