summaryrefslogtreecommitdiff
path: root/indra/llcommon/bitpack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon/bitpack.cpp')
-rw-r--r--indra/llcommon/bitpack.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/indra/llcommon/bitpack.cpp b/indra/llcommon/bitpack.cpp
new file mode 100644
index 0000000000..4acd533600
--- /dev/null
+++ b/indra/llcommon/bitpack.cpp
@@ -0,0 +1,148 @@
+/**
+ * @file bitpack.cpp
+ * @brief Convert data to packed bit stream
+ *
+ * Copyright (c) 2000-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "linden_common.h"
+
+#include "bitpack.h"
+
+#if 0
+#include <stdio.h>
+#include <stdlib.h>
+#include "stdtypes.h"
+
+U8 gLoad, gUnLoad;
+U32 gLoadSize, gUnLoadSize, gTotalBits;
+
+const U32 gMaxDataBits = 8;
+
+/////////////////////////////////////////////////////////////////////////////////////////
+#if 0
+void bit_pack(U8 *outbase, U32 *outptr, U8 *total_data, U32 total_dsize)
+{
+ U32 max_data_bits = gMaxDataBits;
+ U32 load_size = gLoadSize, total_bits = gTotalBits;
+ U32 dsize;
+
+ U8 data;
+ U8 load = gLoad;
+
+ while (total_dsize > 0)
+ {
+ if (total_dsize > max_data_bits)
+ {
+ dsize = max_data_bits;
+ total_dsize -= max_data_bits;
+ }
+ else
+ {
+ dsize = total_dsize;
+ total_dsize = 0;
+ }
+
+ data = *total_data++;
+
+ data <<= (max_data_bits - dsize);
+ while (dsize > 0)
+ {
+ if (load_size == max_data_bits)
+ {
+ *(outbase + (*outptr)++) = load;
+ load_size = 0;
+ load = 0x00;
+ }
+ load <<= 1;
+ load |= (data >> (max_data_bits - 1));
+ data <<= 1;
+ load_size++;
+ total_bits++;
+ dsize--;
+ }
+ }
+
+ gLoad = load;
+ gLoadSize = load_size;
+ gTotalBits = total_bits;
+}
+#endif
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+void bit_pack_reset()
+{
+ gLoad = 0x0;
+ gLoadSize = 0;
+ gTotalBits = 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+void bit_pack_flush(U8 *outbase, U32 *outptr)
+{
+ if (gLoadSize)
+ {
+ gTotalBits += gLoadSize;
+ gLoad <<= (gMaxDataBits - gLoadSize);
+ outbase[(*outptr)++] = gLoad;
+ gLoadSize = 0;
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+#if 0
+void bit_unpack(U8 *total_retval, U32 total_dsize, U8 *indata, U32 *inptr)
+{
+ U32 max_data_bits = gMaxDataBits;
+ U32 unload_size = gUnLoadSize;
+ U32 dsize;
+ U8 *retval;
+ U8 unload = gUnLoad;
+
+ while (total_dsize > 0)
+ {
+ if (total_dsize > max_data_bits)
+ {
+ dsize = max_data_bits;
+ total_dsize -= max_data_bits;
+ }
+ else
+ {
+ dsize = total_dsize;
+ total_dsize = 0;
+ }
+
+ retval = total_data++;
+ *retval = 0x00;
+ while (dsize > 0)
+ {
+ if (unload_size == 0)
+ {
+ unload = indata[(*inptr)++];
+ unload_size = max_data_bits;
+ }
+ *retval <<= 1;
+ *retval |= (unload >> (max_data_bits - 1));
+ unload_size--;
+ unload <<= 1;
+ dsize--;
+ }
+ }
+
+ gUnLoad = unload;
+ gUnLoadSize = unload_size;
+}
+#endif
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+void bit_unpack_reset()
+{
+ gUnLoad = 0;
+ gUnLoadSize = 0;
+}
+#endif