Skip to content

Instantly share code, notes, and snippets.

Avatar

Mathias Stearn RedBeard0531

View GitHub Profile
@RedBeard0531
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>
@RedBeard0531
RedBeard0531 / functions.js
Created Feb 22, 2012
Min, Max, Sum, Count, Avg, and Std deviation using MongoDB MapReduce
View functions.js
// derived from http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Parallel_algorithm
function map() {
emit(1, // Or put a GROUP BY key here
{sum: this.value, // the field you want stats for
min: this.value,
max: this.value,
count:1,
diff: 0, // M2,n: sum((val-mean)^2)
});
View OT.tla
-------------------------------- MODULE OT --------------------------------
EXTENDS Integers, TLC, FiniteSets, Sequences
CONSTANTS i_set, i_inc, i_nop \* Instruction model values
CONSTANT NULL
CONSTANT ImprovedAlgo
ASSUME ImprovedAlgo \in BOOLEAN
@RedBeard0531
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
/////////
View Z98_errors.sh
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
RedBeard0531 / cpp17.md
Last active Apr 23, 2019
New C++17 features
View cpp17.md

Supplement to this video. Watch first 35 min (the language bits), then 1:14:30 - 1:18:15 (the new map features).

You can find a fairly comprehensive list of new features on cppreference or here if you really want to see it all.

Recap of features described in the video

@RedBeard0531
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
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
// https://www.boost.org/doc/libs/1_69_0/libs/coroutine/doc/html/coroutine/coroutine/symmetric.html
#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) {
val.emplace(std::move(v));