Skip to content

Instantly share code, notes, and snippets.

@JakobOvrum
JakobOvrum / dlang-org-redesign-dark-theme.css
Created March 14, 2016 11:51
dlang.org Re-Design Dark Theme
@-moz-document regexp("https?://(www\.|forum\.)?dlang.org/(|library|library-prerelease|phobos|phobos-prerelease|spec)(.*)") {
body {
color: #BFBFBF !important;
background-color: #222 !important;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAgMAAAANjH3HAAAACVBMVEUaGhohISElJSUh9lebAAAB20lEQVRIx4XWuZXDMAwE0C0SAQtggIIYoAAEU+aKOHhYojTrYP2+QfOW/5QIJOih/q8HwF/pb3EX+UPIveYcQGgEHiu9hI+ihEc5Jz5KBIlRRRaJ1JtoSAl5Hw96hLB1/up1tnIXOck5jZQy+3iU2hAOKSH1JvwxHsp+5TLF5MOl1/MQXsVs1miXc+KDbYydyMeUgpPQreZ7fWidbNhkXNJSeAhc6qHmHD8AYovunYyEACWEbyIhNeB9fRrH3hFi0bGPLuEW7xCNaohw1vAlS805nfsrTspclB/hVdoqusg53eH7FWot+wjYpOViX8KbFFKTwlnzvj65P9H/vD0/hibYBGhPwlPO8TmxRsaxsNnrUmUXpNhirlJMPr6Hqq9k5Xn/8iYQHYIuQsWFC6Z87IOxLxHphSY4SpuiU87xJnJr5axfeRd+lnMExXpEWPpuZ1v7qZdNBOjiHzDREHX5fs5Zz9p6X0vVKbKKchlSl5rv+3p//FJ/PYvoKryI8vs+2G9lzRmnEKkh+BU8yDk515jDj/HAswu7CCz6U/Mxb/PnC9N41ndpU4hUU7JGk/C9PmP/M2xZYdvBW2PObyf1IUiIzoHmHW9yTncliYs9A9tVNppdShfgQaTLMf+j3X723tLeHgAAAABJRU5ErkJggg==) !important;
background-cl
@JakobOvrum
JakobOvrum / factory.d
Last active March 17, 2016 18:15
Factory implementation
import std.traits : FunctionAttribute;
private string faToString(FunctionAttribute fa)
{
import std.algorithm, std.traits;
string result;
foreach (member; __traits(derivedMembers, FunctionAttribute))
{
if (fa & __traits(getMember, FunctionAttribute, member))
@JakobOvrum
JakobOvrum / rstf.d
Created December 8, 2015 22:47
Randomized slide to front
// Suggested in http://forum.dlang.org/post/n3ifba$ulq$1@digitalmars.com
// TODO: constraints for needle search aren't accurate
///
template randomSlideToFront(alias pred = "a == b")
{
import std.random : isUniformRNG;
import std.range.primitives;
import std.traits : ifTestable;
@JakobOvrum
JakobOvrum / rc_closure.d
Last active November 10, 2015 23:51
Proof of concept: reference counted closures
/**
* Reference counted closures.
*
* version = with_new_trait supports postblitting and destruction of upvalues,
* but depends on a hypothetical new language-level trait.
*
* The new trait, __traits(upvalues, func), would take an alias to a function
* and return an alias sequence containing a description of its upvalues:
*
* (T1, ptrdiff_t offset1, T2, ptrdiff_t offset2, ...)
/// Returns true iff $(D func(args)) can be evaluated at compile-time
/// and doesn't error when evaluated.
template runsWithoutError(alias func, args...)
if(__traits(compiles, func(args)))
{
// Wrapper anon func so it works with `func`s that have void return type
enum exec() = () { func(args); return true; /* never used */ }();
//enum runsWithoutError = exec!();
enum runsWithoutError = __traits(compiles, exec!());
}
@JakobOvrum
JakobOvrum / curry_delegate.d
Created October 17, 2015 16:30
Curry implementation using delegates (inefficient but yields known types)
import std.traits : isCallable;
private auto curryImpl(F, CurriedArgs...)(F f, CurriedArgs curriedArgs)
{
import std.traits : ParameterTypeTuple;
alias Args = ParameterTypeTuple!F;
static if(CurriedArgs.length == Args.length - 1)
return (Args[CurriedArgs.length] lastArg) => f(curriedArgs, lastArg);
@JakobOvrum
JakobOvrum / curry.d
Last active October 17, 2015 16:31
Curry implementation using structs (efficient but yields unwieldy types)
import std.traits : isFunctionPointer;
private struct Curry(uint n, F...)
if(F.length == 1)
{
import std.traits : ParameterTypeTuple;
alias Args = ParameterTypeTuple!F;
static if(is(F[0]))
@JakobOvrum
JakobOvrum / listclasses.d
Last active August 29, 2015 14:20
List classes in a module at CT
alias Identity(alias sym) = sym;
template ClassesInModule(alias mod)
{
import std.typetuple : Filter, staticMap;
enum isAccessibleClassDeclaration(string member) = __traits(compiles, __traits(getMember, mod, member)) &&
is(Identity!(__traits(getMember, mod, member)) == class);
alias LookupMemberType(string member) = Identity!(__traits(getMember, mod, member));
@JakobOvrum
JakobOvrum / fuzzyenum.d
Last active August 29, 2015 14:20
Fuzzily convert a string to an enum member
enum FuzzyOptions
{
none,
levenshtein,
caseInsensitive
}
template fuzzyTo(Enum, FuzzyOptions options = FuzzyOptions.levenshtein | FuzzyOptions.caseInsensitive)
if (is(Enum == enum))
{
@JakobOvrum
JakobOvrum / nullpropagation.d
Created April 20, 2015 12:15
Approximation of C#'s Null Propagation Operator in D
class Foo
{
string name;
this(string name)
{
this.name = name;
}
}