Reimplement riff.h using templates