#include <SDL/SDL.h>
-#include "Packet.hh"
+#include "packet.hh"
#ifndef bswap_16
}
-namespace Mf {
+namespace moof {
-Packet::Packet(size_t size) :
- mBuffer((char*)malloc(size)),
- mSize(size),
- mR(0),
- mW(0),
- mOriginalW(0),
- mBoolR(0),
- mBoolW(0),
- mBoolNumR(0),
- mBoolNumW(0) {}
-
-Packet::Packet(const char* data, size_t size) :
- mBuffer((char*)malloc(size)),
- mSize(size),
- mR(0),
- mW(size),
- mOriginalW(size),
- mBoolR(0),
- mBoolW(0),
- mBoolNumR(0),
- mBoolNumW(0)
-{
- if (mBuffer) memcpy(mBuffer, data, size);
+packet::packet(size_t size) :
+ buffer_((char*)malloc(size)),
+ size_(size) {}
+
+packet::packet(const char* data, size_t size) :
+ buffer_((char*)malloc(size)),
+ size_(size),
+ state_(size),
+ saved_(size)
+{
+ if (buffer_) memcpy(buffer_, data, size);
else throw std::length_error("out of memory");
}
-Packet::Packet(const Packet& copy) :
- mBuffer((char*)malloc(copy.mSize)),
- mSize(copy.mSize),
- mR(copy.mR),
- mW(copy.mW),
- mOriginalW(copy.mOriginalW),
- mBoolR(copy.mBoolR),
- mBoolW(copy.mBoolW),
- mBoolNumR(copy.mBoolNumR),
- mBoolNumW(copy.mBoolNumW)
+packet::packet(const packet& copy) :
+ buffer_((char*)malloc(copy.size_)),
+ size_(copy.size_),
+ state_(copy.state_),
+ saved_(copy.saved_)
{
- if (mBuffer) memcpy(mBuffer, copy.mBuffer, mSize);
+ if (buffer_) memcpy(buffer_, copy.buffer_, size_);
else throw std::length_error("out of memory");
}
-Packet& Packet::operator=(const Packet& copy)
+packet& packet::operator = (const packet& copy)
{
- free(mBuffer);
-
- mBuffer = (char*)malloc(copy.mSize);
- mSize = copy.mSize;
- mR = copy.mR;
- mW = copy.mW;
- mOriginalW = copy.mOriginalW;
- mBoolR = copy.mBoolR;
- mBoolW = copy.mBoolW;
- mBoolNumR = copy.mBoolNumR;
- mBoolNumW = copy.mBoolNumW;
- if (mBuffer) memcpy(mBuffer, copy.mBuffer, mSize);
+ free(buffer_);
+ buffer_ = (char*)malloc(copy.size_);
+ size_ = copy.size_;
+ if (buffer_) memcpy(buffer_, copy.buffer_, size_);
else throw std::length_error("out of memory");
+
+ state_ = copy.state_;
+ saved_ = copy.saved_;
return *this;
}
-Packet::~Packet()
+packet::~packet()
{
- free(mBuffer);
+ free(buffer_);
}
-Packet& Packet::operator<<(bool value)
+packet& packet::operator << (bool value)
{
- int bit = mBoolNumW % 8;
+ int bit = state_.write_bool_num % 8;
if (bit == 0)
{
- mBoolW = mW;
+ state_.write_bool_mark = state_.write_mark;
unsigned char byte = 0;
if (write(&byte, 1) == 0) throw std::length_error("out of memory");
}
- if (value) mBuffer[mBoolW] |= (1 << bit);
- ++mBoolNumW;
+ if (value) buffer_[state_.write_bool_mark] |= (1 << bit);
+ ++state_.write_bool_num;
return *this;
}
-Packet& Packet::operator<<(int8_t value)
+packet& packet::operator << (int8_t value)
{
return *this << reinterpret_cast<uint8_t&>(value);
}
-Packet& Packet::operator<<(int16_t value)
+packet& packet::operator << (int16_t value)
{
return *this << reinterpret_cast<uint16_t&>(value);
}
-Packet& Packet::operator<<(int32_t value)
+packet& packet::operator << (int32_t value)
{
return *this << reinterpret_cast<uint32_t&>(value);
}
-Packet& Packet::operator<<(int64_t value)
+packet& packet::operator << (int64_t value)
{
return *this << reinterpret_cast<uint64_t&>(value);
}
-Packet& Packet::operator<<(uint8_t value)
+packet& packet::operator << (uint8_t value)
{
if (write(&value, sizeof(value)) != sizeof(value))
{
return *this;
}
-Packet& Packet::operator<<(uint16_t value)
+packet& packet::operator << (uint16_t value)
{
value = htons(value);
if (write(&value, sizeof(value)) != sizeof(value))
return *this;
}
-Packet& Packet::operator<<(uint32_t value)
+packet& packet::operator << (uint32_t value)
{
value = htonl(value);
if (write(&value, sizeof(value)) != sizeof(value))
return *this;
}
-Packet& Packet::operator<<(uint64_t value)
+packet& packet::operator << (uint64_t value)
{
value = htonll(value);
if (write(&value, sizeof(value)) != sizeof(value))
return *this;
}
-Packet& Packet::operator<<(float value)
+packet& packet::operator << (float value)
{
// XXX: assumes the ieee-754
uint32_t* integer = reinterpret_cast<uint32_t*>(&value);
return *this;
}
-Packet& Packet::operator<<(double value)
+packet& packet::operator << (double value)
{
// XXX: assumes the ieee-754
uint64_t* integer = reinterpret_cast<uint64_t*>(&value);
return *this;
}
-size_t Packet::write(const void* bytes, size_t size)
+size_t packet::write(const void* bytes, size_t size)
{
- size_t nBytes = std::min(size, mSize - mW);
- if (!mBuffer || nBytes < size)
+ size_t num_bytes = std::min(size, size_ - state_.write_mark);
+ if (!buffer_ || num_bytes < size)
{
- int nPages = 1 + size / PAGE_SIZE;
- int newSize = mSize + nPages * PAGE_SIZE;
- char* newBuffer = (char*)realloc(mBuffer, newSize);
- if (newBuffer)
+ int num_pages = 1 + size / PAGE_SIZE;
+ int new_size = size_ + num_pages * PAGE_SIZE;
+ char* new_buffer = (char*)realloc(buffer_, new_size);
+ if (new_buffer)
{
- mBuffer = newBuffer;
- mSize = newSize;
- nBytes = size;
+ buffer_ = new_buffer;
+ size_ = new_size;
+ num_bytes = size;
}
- if (!mBuffer) return 0;
+ if (!buffer_) return 0;
}
- memcpy(mBuffer + mW, bytes, nBytes);
- mW += nBytes;
- return nBytes;
+ memcpy(buffer_ + state_.write_mark, bytes, num_bytes);
+ state_.write_mark += num_bytes;
+ return num_bytes;
}
-Packet& Packet::operator>>(bool& value)
+packet& packet::operator >> (bool& value)
{
- int bit = mBoolNumR % 8;
+ int bit = state_.read_bool_num % 8;
if (bit == 0)
{
- mBoolR = mR;
+ state_.read_bool_mark = state_.read_mark;
unsigned char byte = 0;
if (read(&byte, 1) == 0) throw std::out_of_range("end of packet");
}
- value = 1 & (mBuffer[mBoolR] >> bit);
- ++mBoolNumR;
+ value = 1 & (buffer_[state_.read_bool_mark] >> bit);
+ ++state_.read_bool_num;
return *this;
}
-Packet& Packet::operator>>(int8_t& value)
+packet& packet::operator >> (int8_t& value)
{
return *this >> reinterpret_cast<uint8_t&>(value);
}
-Packet& Packet::operator>>(int16_t& value)
+packet& packet::operator >> (int16_t& value)
{
return *this >> reinterpret_cast<uint16_t&>(value);
}
-Packet& Packet::operator>>(int32_t& value)
+packet& packet::operator >> (int32_t& value)
{
return *this >> reinterpret_cast<uint32_t&>(value);
}
-Packet& Packet::operator>>(int64_t& value)
+packet& packet::operator >> (int64_t& value)
{
return *this >> reinterpret_cast<uint64_t&>(value);
}
-Packet& Packet::operator>>(uint8_t& value)
+packet& packet::operator >> (uint8_t& value)
{
if (read(&value, sizeof(value)) != sizeof(value))
{
return *this;
}
-Packet& Packet::operator>>(uint16_t& value)
+packet& packet::operator >> (uint16_t& value)
{
if (read(&value, sizeof(value)) != sizeof(value))
{
return *this;
}
-Packet& Packet::operator>>(uint32_t& value)
+packet& packet::operator >> (uint32_t& value)
{
if (read(&value, sizeof(value)) != sizeof(value))
{
return *this;
}
-Packet& Packet::operator>>(uint64_t& value)
+packet& packet::operator >> (uint64_t& value)
{
if (read(&value, sizeof(value)) != sizeof(value))
{
return *this;
}
-Packet& Packet::operator>>(float& value)
+packet& packet::operator >> (float& value)
{
// XXX: assumes the ieee-754
uint32_t* integer = reinterpret_cast<uint32_t*>(&value);
return *this;
}
-Packet& Packet::operator>>(double& value)
+packet& packet::operator >> (double& value)
{
// XXX: assumes the ieee-754
uint64_t* integer = reinterpret_cast<uint64_t*>(&value);
return *this;
}
-size_t Packet::read(void* bytes, size_t size)
+size_t packet::read(void* bytes, size_t size)
{
- size_t nBytes = std::min(size, mW - mR);
- memcpy(bytes, mBuffer + mR, nBytes);
- mR += nBytes;
- return nBytes;
+ size_t num_bytes = std::min(size, state_.write_mark - state_.read_mark);
+ memcpy(bytes, buffer_ + state_.read_mark, num_bytes);
+ state_.read_mark += num_bytes;
+ return num_bytes;
}
-void Packet::clear()
+void packet::clear()
{
- mR = 0;
- mW = 0;
- mBoolR = 0;
- mBoolW = 0;
- mBoolNumR = 0;
- mBoolNumW = 0;
+ state_.read_mark = state_.write_mark;
+ state_.read_bool_mark = 0;
+ state_.read_bool_num = 0;
+ state_.write_bool_mark = 0;
+ state_.write_bool_num = 0;
}
-void Packet::reset()
+void packet::save()
+{
+ saved_ = state_;
+}
+
+void packet::revert()
{
- mR = 0;
- mW = mOriginalW;
- mBoolR = 0;
- mBoolW = 0;
- mBoolNumR = 0;
- mBoolNumW = 0;
+ state_ = saved_;
}
-} // namespace Mf
+} // namespace moof