Really cool C++ stuff, including modern async
Open-source under MIT License
Copyright (c) 2013 Grady O'Connell
- Coroutines w/ YIELD(), AWAIT(), and SLEEP()
- Channels
- Async Sockets
- Event Multiplexer
// MX thread 0, void future MX[0].coro<void>([]{ // do async stuff auto foo = AWAIT(bar); // async sleep yield SLEEP(chrono::milliseconds(100)); });
// socket example MX[0].coro<void>([&]{ for(;;) { auto client = make_shared<TCPSocket>(AWAIT(server->accept())); // coroutine per client MX[0].coro<void>([&, client]{ int client_id = client_ids++; LOGf("client %s connected", client_id); try{ for(;;) AWAIT(client->send(AWAIT(client->recv()))); }catch(const socket_exception& e){ LOGf("client %s disconnected (%s)", client_id % e.what()); } }); } });
signals, reactive values (signal-paired vars), and lazy evaluation
JSON-compatible serializable meta-objects, property trees
Timelines, alarms, animation/easing, waypoints/keyframes, interpolation
Logger w/ error handling, thread-safe scoped indent, silencing, and capturing
some math stuff to use with glm
Common stuff used by other modules, including:
- freezable: freeze objects as immutable
- make_unique: clone of c++14 function
- dummy_mutex
- ENTIRE() range macro
- bit() and mask()
- null_ptr_exception
- scoped_unlock
- thread-safe singleton
- timed function auto-retry
- index data structures w/ unused ID approximation