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 futureMX[0].coro<void>([]{// do async stuffauto foo =AWAIT(bar);// async sleep yieldSLEEP(chrono::milliseconds(100));});
// socket exampleMX[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