Files
Cesarus85--mjolnir-vr/source/memory/data_encoding.c
T

158 lines
3.6 KiB
C

/*
DATA_ENCODING.C
symbols in this file:
00109470 0070:
_data_encode_new (0000)
001094E0 0130:
_data_encode_memory (0000)
00109610 0100:
_data_encode_integer (0000)
00109710 0100:
_data_encode_structures (0000)
00109810 0240:
_data_encode_array (0000)
00109A50 00a0:
_data_encode_string (0000)
00109AF0 0070:
_data_decode_new (0000)
00109B60 00f0:
_data_decode_structures (0000)
00109C50 0130:
_data_decode_memory (0000)
00109D80 0070:
_data_decode_byte (0000)
00109DF0 0080:
_data_decode_short (0000)
00109E70 0080:
_data_decode_long (0000)
00109EF0 0030:
_data_decode_int64 (0000)
00109F20 0070:
_data_decode_integer (0000)
00109F90 0170:
_data_decode_array (0000)
0010A100 0050:
_data_decode_string (0000)
0027D428 0026:
??_C@_0CG@DKDENLGI@c?3?2halo?2SOURCE?2memory?2data_encod@ (0000)
0027D450 004f:
??_C@_0EP@IBADKJMK@state?5?$CG?$CG?5state?9?$DObuffer?5?$CG?$CG?5state?9@ (0000)
0027D4A0 0010:
??_C@_0BA@MMBBIMAK@maximum_value?$DO0?$AA@ (0000)
0027D4B0 000e:
??_C@_0O@DLMDCMCD@bs_definition?$AA@ (0000)
0027D4C0 0012:
??_C@_0BC@JKGHEGPN@source_structures?$AA@ (0000)
0027D4D4 0022:
??_C@_0CC@ENPGOLI@element_count?$DM?$DNUNSIGNED_SHORT_MA@ (0000)
0027D4F8 0021:
??_C@_0CB@ICNNLDBF@element_count?$DM?$DNUNSIGNED_CHAR_MAX@ (0000)
0027D51C 0011:
??_C@_0BB@LOCFNCAH@element_count?$DO?$DN0?$AA@ (0000)
0027D530 000d:
??_C@_0N@MOKGBPFF@source_array?$AA@ (0000)
0027D540 0032:
??_C@_0DC@POGPGOIK@state?9?$DOoffset?$CLstring_length?$CL1?$DM?$DNs@ (0000)
0027D574 0013:
??_C@_0BD@IAHGFBAA@structure_count?$DO?$DN0?$AA@ (0000)
0027D588 0050:
??_C@_0FA@EJBJLMFJ@state?5?$CG?$CG?5state?9?$DObuffer?5?$CG?$CG?5state?9@ (0000)
0027D5D8 0018:
??_C@_0BI@EADHMJMM@maximum_element_count?$DO0?$AA@ (0000)
0027D5F0 0018:
??_C@_0BI@PJCDPPLJ@element_count_reference?$AA@ (0000)
*/
/* ---------- headers */
#include "cseries.h"
#include "memory/data_encoding.h"
/* ---------- constants */
/* ---------- macros */
/* ---------- structures */
/* ---------- prototypes */
/* ---------- globals */
/* ---------- public code */
void data_encode_new(
struct data_encoding_state *state,
void *buffer,
long buffer_size)
{
match_assert("c:\\halo\\SOURCE\\memory\\data_encoding.c", 25, buffer);
match_assert("c:\\halo\\SOURCE\\memory\\data_encoding.c", 26, buffer_size>=0);
csmemset(state, 0, sizeof(*state));
state->buffer = buffer;
state->buffer_size = buffer_size;
return;
}
void data_decode_new(
struct data_encoding_state *state,
void const *buffer,
long buffer_size)
{
match_assert("c:\\halo\\SOURCE\\memory\\data_encoding.c", 204, buffer);
match_assert("c:\\halo\\SOURCE\\memory\\data_encoding.c", 205, buffer_size>=0);
csmemset(state, 0, sizeof(*state));
state->buffer = (byte *)buffer;
state->buffer_size = buffer_size;
return;
}
__int64 data_decode_int64(
struct data_encoding_state *state)
{
__int64 *value;
return (value = data_decode_memory(state, 1, -sizeof(*value))) ? *value : 0;
}
long data_decode_integer(
struct data_encoding_state *state,
long maximum_value)
{
match_assert("c:\\halo\\SOURCE\\memory\\data_encoding.c", 321, maximum_value>0);
if (maximum_value <= UNSIGNED_CHAR_MAX)
return data_decode_byte(state);
if (maximum_value <= UNSIGNED_SHORT_MAX)
return data_decode_short(state);
return data_decode_long(state);
}
char *data_decode_string(
struct data_encoding_state *state,
long maximum_length)
{
char *string = state->buffer + state->offset;
short string_length = 0;
while (state->offset + string_length < state->buffer_size)
{
if (!string[string_length])
{
state->offset += string_length + 1;
return string;
}
string_length++;
}
state->overflow = TRUE;
return NULL;
}
/* ---------- private code */