#include "shark_utils.h"

void shark_encode_u16(shark_u8 *buff, shark_u16 value)
{
	shark_encode_u8(buff, value);
	shark_encode_u8(buff + 1, value >> 8);
}

void shark_encode_u24(shark_u8 *buff, shark_u32 value)
{
	shark_encode_u16(buff, value);
	shark_encode_u8(buff + 2, value >> 16);
}

void shark_encode_u32(shark_u8 *buff, shark_u32 value)
{
	shark_encode_u24(buff, value);
	shark_encode_u8(buff + 3, value >> 24);
}

void shark_encode_u64(shark_u8 *buff, shark_u64 value)
{
	memcpy(buff, &value, sizeof(value));
}

shark_u16 shark_decode_u16(const shark_u8 *buff)
{
	return SHARK_U16(buff[1]) << 8 | shark_decode_u8(buff);
}

shark_u32 shark_decode_u24(const shark_u8 *buff)
{
	return SHARK_U24(buff[2]) << 16 | shark_decode_u16(buff);
}

shark_u32 shark_decode_u32(const shark_u8 *buff)
{
	return SHARK_U32(buff[3]) << 24 | shark_decode_u24(buff);
}

shark_u64 shark_decode_u64(const shark_u8 *buff)
{
	shark_u64 value;
	memcpy(&value, buff, sizeof(buff));
	return value;
}

