X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/5aaf7aaa7d95bb26178ae2c192b84401f5544244..8c95a9e8b7ae0e2a480d7a6de0bf4ca933799c7e:/src/pack.c diff --git a/src/pack.c b/src/pack.c deleted file mode 100644 index 38a4f44..0000000 --- a/src/pack.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Portable binary serialisation of integral types. - * Copyright © 2009 Nick Bowler - * - * Copying and distribution of this file, with or without modification, - * are permitted in any medium without royalty provided the copyright - * notice and this notice are preserved. This file is offered as-is, - * without any warranty. - */ - -#include "pack.h" - -/* Unsigned integer packing. */ -#define DEFPACK_BE(bits, type) void pack_ ## bits ## _be ( \ - unsigned char *out, type v \ -) { \ - unsigned i; \ - for (i = 1; i <= bits/8; i++) { \ - out[bits/8 - i] = v % 256; \ - v /= 256; \ - } \ -} - -#define DEFPACK_LE(bits, type) void pack_ ## bits ## _le ( \ - unsigned char *out, type v \ -) { \ - unsigned i; \ - for (i = 0; i < bits/8; i++) { \ - out[i] = v % 256; \ - v /= 256; \ - } \ -} - -DEFPACK_BE(16, unsigned short) -DEFPACK_BE(32, unsigned long) -#if PACK_HAVE_64BIT -DEFPACK_BE(64, unsigned long long) -#endif - -DEFPACK_LE(16, unsigned short) -DEFPACK_LE(32, unsigned long) -#if PACK_HAVE_64BIT -DEFPACK_LE(64, unsigned long long) -#endif - -#define DEFUNPACK_BE(bits, type) type unpack_ ## bits ## _be ( \ - const unsigned char *in \ -) { \ - type v = 0; \ - unsigned i; \ - for (i = 0; i < bits/8; i++) { \ - v *= 256; \ - v += in[i]; \ - } \ - return v; \ -} - -#define DEFUNPACK_LE(bits, type) type unpack_ ## bits ## _le ( \ - const unsigned char *in \ -) { \ - type v = 0; \ - unsigned i; \ - for (i = 1; i <= bits/8; i++) { \ - v *= 256; \ - v += in[bits/8 - i]; \ - } \ - return v; \ -} - -DEFUNPACK_BE(16, unsigned short) -DEFUNPACK_BE(32, unsigned long) -#if PACK_HAVE_64BIT -DEFUNPACK_BE(64, unsigned long long) -#endif - -DEFUNPACK_LE(16, unsigned short) -DEFUNPACK_LE(32, unsigned long) -#if PACK_HAVE_64BIT -DEFUNPACK_LE(64, unsigned long long) -#endif - -/* - * Two's complement signed integer packing. This is unlikely to work on - * systems that don't themselves use two's complement. - */ - -#define DEFUNPACK_SBE(bits, max, type) type unpack_s ## bits ## _be ( \ - const unsigned char *in \ -) { \ - type v = 0; \ - unsigned i; \ - int sign = (in[0] & 0x80) ? 1 : 0; \ - for (i = 0; i < bits/8; i++) { \ - v *= 256; \ - v += in[i] & (i == 0 ? 0x7f : 0xff); \ - } \ - return sign*(-max-1) + v; \ -} - -#define DEFUNPACK_SLE(bits, max, type) type unpack_s ## bits ## _le ( \ - const unsigned char *in \ -) { \ - type v = 0; \ - unsigned i; \ - int sign = (in[bits/8 - 1] & 0x80) ? 1 : 0; \ - for (i = 1; i <= bits/8; i++) { \ - v *= 256; \ - v += in[bits/8 - i] & (i == 1 ? 0x7f : 0xff); \ - } \ - return sign*(-max-1) + v; \ -} - -DEFUNPACK_SBE(16, 32767, short) -DEFUNPACK_SBE(32, 2147483647l, long) -#if PACK_HAVE_64BIT -DEFUNPACK_SBE(64, 9223372036854775807ll, long long) -#endif - -DEFUNPACK_SLE(16, 32767, short) -DEFUNPACK_SLE(32, 2147483647l, long) -#if PACK_HAVE_64BIT -DEFUNPACK_SLE(64, 9223372036854775807ll, long long) -#endif