]> git.jsancho.org Git - lugaru.git/blob - Source/unpack_private.c
b019e28434d61ee6ace3189af0a232c0f0ad5cc2
[lugaru.git] / Source / unpack_private.c
1 #include "unpack_private.h"
2
3 extern void BinIOUnpack(void *context, int type, int byte_order, int count)
4 {
5     struct BinIOUnpackContext *ctx = (struct BinIOUnpackContext*)context;
6     if (count == -1)
7     {
8         count = 1;
9     }
10
11     switch (type)
12     {
13         case BinIO_TYPE_IGNORE_BYTE:                                                                                                   ctx->data += 1 * count; break;
14         case BinIO_TYPE_BYTE:        BinIOConvert1(byte_order, BinIO_HOST_BYTE_ORDER, ctx->data, va_arg(ctx->args, uint8_t *), count); ctx->data += 1 * count; break;
15         case BinIO_TYPE_INT16:       BinIOConvert2(byte_order, BinIO_HOST_BYTE_ORDER, ctx->data, va_arg(ctx->args, uint8_t *), count); ctx->data += 2 * count; break;
16         case BinIO_TYPE_INT32:       BinIOConvert4(byte_order, BinIO_HOST_BYTE_ORDER, ctx->data, va_arg(ctx->args, uint8_t *), count); ctx->data += 4 * count; break;
17         case BinIO_TYPE_INT64:       BinIOConvert8(byte_order, BinIO_HOST_BYTE_ORDER, ctx->data, va_arg(ctx->args, uint8_t *), count); ctx->data += 8 * count; break;
18         case BinIO_TYPE_FLOAT32:     BinIOConvert4(byte_order, BinIO_HOST_BYTE_ORDER, ctx->data, va_arg(ctx->args, uint8_t *), count); ctx->data += 4 * count; break;
19         case BinIO_TYPE_FLOAT64:     BinIOConvert8(byte_order, BinIO_HOST_BYTE_ORDER, ctx->data, va_arg(ctx->args, uint8_t *), count); ctx->data += 8 * count; break;
20     }
21 }