2014-01-18 23:09:28 -05:00

101 lines
1.9 KiB
C++

#include "ByteBuffer.h"
void BbInitializeWrappedBuffer(PBYTE_BUFFER buff, char* data, int offset, int length, int byteOrder) {
buff->buffer = data;
buff->offset = offset;
buff->length = length;
buff->position = 0;
buff->byteOrder = byteOrder;
}
static int byteSwapInt(PBYTE_BUFFER buff, int i) {
if (buff->byteOrder == BYTE_ORDER_BIG) {
return htonl(i);
}
else {
return i;
}
}
static int byteSwapShort(PBYTE_BUFFER buff, short s) {
if (buff->byteOrder == BYTE_ORDER_BIG) {
return htons(s);
}
else {
return s;
}
}
int BbGet(PBYTE_BUFFER buff, char *c) {
if (buff->position + sizeof(c) >= buff->length) {
return 0;
}
memcpy(c, &buff->buffer[buff->position], sizeof(*c));
buff->position += sizeof(c);
return 1;
}
int BbGetShort(PBYTE_BUFFER buff, short *s) {
if (buff->position + sizeof(s) >= buff->length) {
return 0;
}
memcpy(s, &buff->buffer[buff->position], sizeof(*s));
buff->position += sizeof(s);
*s = byteSwapShort(buff, *s);
return 1;
}
int BbGetInt(PBYTE_BUFFER buff, int *i) {
if (buff->position + sizeof(i) >= buff->length) {
return 0;
}
memcpy(i, &buff->buffer[buff->position], sizeof(*i));
buff->position += sizeof(i);
*i = byteSwapInt(buff, *i);
return 1;
}
int BbPutInt(PBYTE_BUFFER buff, int i) {
if (buff->position + sizeof(i) >= buff->length) {
return 0;
}
i = byteSwapInt(buff, i);
memcpy(&buff->buffer[buff->position], &i, sizeof(i));
buff->position += sizeof(i);
return 1;
}
int BbPutShort(PBYTE_BUFFER buff, short s) {
if (buff->position + sizeof(s) >= buff->length) {
return 0;
}
s = byteSwapShort(buff, s);
memcpy(&buff->buffer[buff->position], &s, sizeof(s));
buff->position += sizeof(s);
return 1;
}
int BbPut(PBYTE_BUFFER buff, char c) {
if (buff->position + sizeof(c) >= buff->length) {
return 0;
}
memcpy(&buff->buffer[buff->position], &c, sizeof(c));
buff->position += sizeof(c);
return 1;
}