Skip to content

Instantly share code, notes, and snippets.

View saxbophone's full-sized avatar
🏳️‍⚧️

saxbophone

🏳️‍⚧️
View GitHub Profile
@saxbophone
saxbophone / stringview.py
Last active August 3, 2023 03:33
Python StringView implementation. Supports slicing, iteration and creating sub-views of existing StringViews. No copying, only reference semantics.
class StringView:
"""
StringView implementation using minimal copying with maximum use of
reference semantics. Creating a sub-view of an existing StringView using
either object slicing or constructing one from another will reüse the same
source string object, using a reference rather than a copy.
The contents() method can similarly be used to get an iterator (Generator)
to access the view contents sequentially without putting it all in memory
at once.
A brand new string object is only created if the StringView is cast to str.
@saxbophone
saxbophone / rwlock.py
Created July 30, 2023 23:49 — forked from tylerneylon/rwlock.py
A simple read-write lock implementation in Python.
# -*- coding: utf-8 -*-
""" rwlock.py
A class to implement read-write locks on top of the standard threading
library.
This is implemented with two mutexes (threading.Lock instances) as per this
wikipedia pseudocode:
https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock#Using_two_mutexes
@saxbophone
saxbophone / floatrep.cpp
Last active July 27, 2023 12:31
Using memcpy to easily and portably get the underlying representation of an IEEE-754 float
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <limits>
std::uint32_t floatrep(float x) {
std::uint32_t n;
std::memcpy(&n, &x, sizeof(x));
return n;
@saxbophone
saxbophone / c̴̎̓u̴͌̂r̵̛̓s̸̎̽é̵̉̉d̷͑̚.cpp
Last active June 11, 2023 12:23
Some truly c̴̎̓u̴͌̂r̵̛̓s̸̎̽é̵̉̉d̷͑̚ C++ code
struct $ {
$ (*$)($*);
};
$ d($* x) {
return *x;
}
int main() {
$ d = {::d};
@saxbophone
saxbophone / generic-multidim.c++
Created May 28, 2023 19:08
Dimension-generic multidimensional array in C++23
#include <cstddef>
#include <concepts>
// version with static bounds on the dimensions
template <typename T, std::size_t... DIMS>
struct vec {
template <std::convertible_to<std::size_t>... Is>
requires (sizeof...(Is) == sizeof...(DIMS))
T operator[](Is... indices) { return {}; }
};
@saxbophone
saxbophone / thread-safe-memoiser.c++
Last active April 7, 2023 14:46
Thread-safe function memoisation in C++
#include <functional>
#include <mutex>
#include <shared_mutex>
#include <tuple>
#include <unordered_map>
#include <boost/container_hash/hash.hpp>
template <class>
@saxbophone
saxbophone / xflow_detect.c++
Created February 3, 2023 15:45
Overflow/underflow detection without having to operate twice
#include <iostream>
#include <climits>
unsigned detect_overflow(unsigned x) {
auto old_x = x++;
if (old_x > x) {
std::cerr << "Overflow occurred: " << x - 1 << " -> " << x << std::endl;
}
return x;
}
@saxbophone
saxbophone / sfml-deps.sh
Created January 31, 2023 21:23
Installs for SFML on linux
sudo apt-get install libx11-dev libxrandr-dev libudev-dev libfreetype-dev libopengl-dev libflac-dev libogg-dev libvorbis-dev libvorbisenc2 libvorbisfile3 libopenal-dev
@saxbophone
saxbophone / compress_ratios.sh
Created November 24, 2022 08:46
Test XZ Compression ratios
echo "b" > file.txt;
while [[ true ]]; do
xz -9e -T 0 -k -v -c file.txt > /dev/null;
cat file.txt file.txt > new.txt;
mv new.txt file.txt;
done
@saxbophone
saxbophone / gitignore.sh
Created November 17, 2022 16:26
Generate .gitignore files for given languages straight from the comfort of the UNIX shell
# Created by Joshua Saxby 2022
# This BASH shell script function is placed into the Public Domain
# There are no restrictions on its use but it is provided with ABSOLUTELY no liability, warranty, etc, etc...
# !!don't sue me for using it at your own risk...!!
# uses the new version of the former gitignore.io API to generate gitignore files for given languages
# usage: $ gitignore <lang 1> <lang 2> ... <lang n>
#
# NOTE: overwrites local .gitignore file in-place