--- a/objwriter.h Mon Jul 16 04:07:15 2012 +0300 +++ b/objwriter.h Mon Jul 16 04:15:49 2012 +0300 @@ -109,12 +109,29 @@ writepos++; } } - + template<class T> T Read() { T result = buffer[readpos]; readpos += sizeof (T); return result; } + +private: + template <class T> unsigned char CharByte (T a, unsigned int b) { + if (b >= sizeof (T)) + error ("CharByte: tried to get byte %u out of a %u-byte %s\n", + b, sizeof (T), typeid(T).name()); + + unsigned long p1 = pow<unsigned long> (256, b); + unsigned long p2 = pow<unsigned long> (256, b+1); + unsigned long r = (a % p2) / p1; + + if (r > 256) + error ("result %lu too big!", r); + + unsigned char ur = static_cast<unsigned char> (r); + return ur; + } }; class ObjWriter {