Generic data and algorithms for C