Skip to content

Instantly share code, notes, and snippets.


Mathias Stearn RedBeard0531

View GitHub Profile
RedBeard0531 / generator.h
Created Sep 14, 2021
C++20 generator with nice semantics for simple generator<T>
View generator.h
#pragma once
#include <iterator>
#include <utility>
#include <coroutine>
// Only need one of these. Shouldn't depend on generator's T.
struct generator_sentinel {};
template <typename T>
View OT.tla
-------------------------------- MODULE OT --------------------------------
EXTENDS Integers, TLC, FiniteSets, Sequences
CONSTANTS i_set, i_inc, i_nop \* Instruction model values
CONSTANT ImprovedAlgo
ASSUME ImprovedAlgo \in BOOLEAN
RedBeard0531 / mod_reach.cpp
Created Nov 7, 2019
module reachability examples
View mod_reach.cpp
export module quux;
export struct quux{};
// bar.h
import quux
clang++ -std=c++2a -x c++-module iface.cpp --precompile -o iface.pcm -stdlib=libc++
clang++ -std=c++2a -x c++ consumer.cpp -c -o consumer.o -fmodule-file=iface.pcm -stdlib=libc++
echo <<OUTPUT
In file included from consumer.cpp:2:
In file included from /usr/include/c++/v1/string:505:
In file included from /usr/include/c++/v1/string_view:176:
In file included from /usr/include/c++/v1/__string:57:
In file included from /usr/include/c++/v1/algorithm:643:
/usr/include/c++/v1/utility:574:1: error: redeclaration of deduction guide
RedBeard0531 / sc.cpp
Created Mar 14, 2019
Example of non-sequential consistency
View sc.cpp
// {{{
// vim: set foldmethod=marker:
// g++ -O3 -pthread sc.cpp && ./a.out
#include <cstdio>
#include <thread>
#include <atomic>
using namespace std;
constexpr auto load_order = memory_order_acquire;
constexpr auto store_order = memory_order_release;
View gist:23330df6cf9e320e5ff80febae2b522f
(depth 1 are direct includes from the cpp)
A single file from our codebase:
28 headers at depth 1
35 headers at depth 2
50 headers at depth 3
74 headers at depth 4
82 headers at depth 5
89 headers at depth 6
127 headers at depth 7
RedBeard0531 / symmetric_coro_in_ts.cpp
Created Feb 5, 2019
Symmetric coroutines using the coroutines TS
View symmetric_coro_in_ts.cpp
// A possible implementation of symmetic coroutines on top of the asymmetric coroutines ts.
// At the bottom of this file, I've rewritten the symmetric examples from Boot.Coroutine
// using this mechanism. You can see the originals at
#include <experimental/coroutine>
#include <cassert>
#include <list>
#include <optional>
#include <vector>
View semi_lazy.cpp
template <typename T>
struct semi_lazy {
struct promise_type {
std::optional<T> val;
std::function<void()> defer;
suspend_never initial_suspend() { return {}; }
suspend_always final_suspend() { return {}; }
void return_value(T v) {
View finally_lazy_shared.cpp
#include <type_traits>
#include <future>
#include <functional>
template <typename T>
struct expected {
expected(const T&) {}
template <typename T>
struct Promise {
View sender_reciever_concepts.cpp
#include <utility>
#include <exception>
// This is probably customizable
using Error = std::exception_ptr;
template <typename R, typename T>
concept ValueReciever = requires (T a, R r) {