terom@31: terom@31: #include "NetworkPacket.hh" terom@31: terom@31: terom@31: NetworkPacket::NetworkPacket (void) : terom@32: size(NETWORK_PACKET_SIZE), offset(0) { terom@31: terom@31: // nothing terom@31: } terom@31: terom@31: template T NetworkPacket::read_val (void) { terom@31: T val; terom@31: terom@31: // check size terom@31: if (offset + sizeof(T) > size) terom@31: throw CL_Error("not enough data to read"); terom@31: terom@31: // set value terom@31: val = *((T*) (buf + offset)); terom@31: terom@31: // update offset terom@31: offset += sizeof(T); terom@31: terom@31: // return terom@31: return val; terom@31: } terom@31: terom@31: template void NetworkPacket::write_val (const T &val) { terom@31: // check max size terom@31: if (offset + sizeof(T) > NETWORK_PACKET_SIZE) terom@31: throw CL_Error("not enough space to write"); terom@31: terom@31: // set value terom@31: *((T*) (buf + offset)) = val; terom@31: terom@31: // update offset and size terom@31: offset += sizeof(T); terom@31: size += sizeof(T); terom@31: } terom@31: terom@31: uint32_t NetworkPacket::read_uint32 (void) { terom@31: return ntohl(read_val()); terom@31: } terom@31: terom@31: uint16_t NetworkPacket::read_uint16 (void) { terom@31: return ntohs(read_val()); terom@31: } terom@31: terom@31: uint8_t NetworkPacket::read_uint8 (void) { terom@31: return read_val(); terom@31: } terom@31: terom@31: int32_t NetworkPacket::read_int32 (void) { terom@31: return ntohl(read_val()); terom@31: } terom@31: terom@31: int16_t NetworkPacket::read_int16 (void) { terom@31: return ntohs(read_val()); terom@31: } terom@31: terom@31: int8_t NetworkPacket::read_int8 (void) { terom@31: return read_val(); terom@31: } terom@31: terom@31: void NetworkPacket::write_uint32 (uint32_t val) { terom@31: write_val(htonl(val)); terom@31: } terom@31: terom@31: void NetworkPacket::write_uint16 (uint16_t val) { terom@31: write_val(htons(val)); terom@31: } terom@31: terom@31: void NetworkPacket::write_uint8 (uint8_t val) { terom@31: write_val(val); terom@31: } terom@31: terom@31: void NetworkPacket::write_int32 (int32_t val) { terom@31: write_val(htonl(val)); terom@31: } terom@31: terom@31: void NetworkPacket::write_int16 (int16_t val) { terom@31: write_val(htons(val)); terom@31: } terom@31: terom@31: void NetworkPacket::write_int8 (int8_t val) { terom@31: write_val(val); terom@31: } terom@31: