Skip to content

Instantly share code, notes, and snippets.

View garettbass's full-sized avatar
🤓

Garett Bass garettbass

🤓
View GitHub Profile
#include <iostream>
struct Foo
{
int a;
int b;
};
template<typename T, typename Struct>
constexpr size_t offset_of(T Struct::*member) {
@garettbass
garettbass / blue_noise.c
Last active February 4, 2019 18:38
A cheeky C implementation of "A simple method to construct isotropic quasirandom blue noise point sequences"
// based on C++ implementation by syoyo https://gist.github.com/syoyo/831c4b1926aa88c0da9221211723da2d
// http://extremelearning.com.au/a-simple-method-to-construct-isotropic-quasirandom-blue-noise-point-sequences/
#if __cplusplus
extern "C" {
#endif
static inline void sample_point_2d(
double p[2],
int i, // 1, 2, 3, ...
double jitter, // > 0
@garettbass
garettbass / seq.h
Last active May 29, 2019 16:32
Simple sequence manipulation
#pragma once
#include <assert.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#if defined(_WIN32)
#include <malloc.h>
@garettbass
garettbass / static_hash.h
Last active May 30, 2019 18:26
Compile time fnv1a 32- and 64-bit hashing of up to 15 characters in C
#pragma once
//------------------------------------------------------------------------------
#define FNV1A32_BASIS (2166136261u)
#define FNV1A32_PRIME (16777619u)
#define FNV1A64_BASIS (14695981039346656037ull)
#define FNV1A64_PRIME (1099511628211ull)
@garettbass
garettbass / array.h
Last active May 30, 2019 23:27
Some utilities for C arrays
#pragma once
#include <assert.h>
#define must_be_array(a)\
_Pragma("GCC diagnostic push")\
_Pragma("GCC diagnostic error \"-Wincompatible-pointer-types\"")\
((void)sizeof(((char(*)(typeof(a[0])(*)[sizeof(a)/sizeof(a[0])]))0)(&a)))\
_Pragma("GCC diagnostic pop")\
// returns the length of the provided array
@garettbass
garettbass / swap.c
Created July 15, 2019 19:22
A simple in-place swap macro for C
#define swap(a, b) do {\
typedef struct { char data[sizeof(a) == sizeof(b) ? sizeof(a) : -1]; } swap;\
swap* const aa = (swap*)&(a);\
swap* const bb = (swap*)&(b);\
swap const cc = *aa; *aa = *bb; *bb = cc;\
} while(0)
@garettbass
garettbass / echo.h
Last active August 4, 2019 01:45
echo(expr) prints the expression and its value
#pragma once
#ifdef __cplusplus
#include <cstdio>
static inline int
_echo(const char* x, bool v)
{ return printf("%s: %s", x, v?"true":"false"); }
@garettbass
garettbass / sh main.cpp
Last active August 6, 2019 12:08
Self-executable C++ file
///usr/bin/env \
[ -n "${PATHEXT}" ] && ext='.exe'; \
bin="$(dirname $0)/$(basename ${0%.*})$ext"; \
c++ -std=c++11 -Werror -o $bin $0 \
&& $bin "$@"; \
status=$?; \
rm $bin; \
exit $status
#include <cstdio>
@garettbass
garettbass / stlcost.cpp
Created August 11, 2019 18:15
stlcost.cpp
/*
c++ --version; c++ -std=c++14 -g stlcost.cpp && ./a.out && rm ./a.out
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
iteration 0 -----------------------------------------
malloc():
@garettbass
garettbass / msvc_sections.c
Last active December 11, 2019 18:37
Enumerating section symbols with MSVC (https://rextester.com/TOUNK25484)
//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
#include <stdio.h>
#define CONCAT(A, B) _CONCAT(A, B)
#define _CONCAT(A, B) A##B
#define TOSTRING(...) _TOSTRING(__VA_ARGS__)
#define _TOSTRING(...) #__VA_ARGS__