/// Utilities to work with C bindings (e.g. OpenGL, SDL) module sily.clang; // TODO replace with template mixin csizeof!(Type, Size) => csizeof(Type[][][]...) /// Returns C style size template csizeof(T) { /// Returns C style size uint csizeof(int var) { return (var * int.sizeof).to!uint; } /// Ditto uint csizeof(T[] var) { return (var.length * T.sizeof).to!uint; } /// Ditto uint csizeof(T[][] var) { return (var[0].length * var.length * T.sizeof).to!uint; } /// Ditto uint csizeof(T[][][] var) { return (var[0][0].length * var[0].length * var.length * T.sizeof).to!uint; } }