objwriter.h

changeset 29
b4e09ae24bf1
parent 27
15c06a191f9b
child 32
d11a034aabfd
--- 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 {

mercurial