X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fmoof%2Fpacket.cc;fp=src%2FMoof%2FPacket.cc;h=0440b7df5749760861dfdfc4a5c913220258a450;hb=831f04d4bc19a390415ac0bbac4331c7a65509bc;hp=437438effd73803b814123f3bfbea4ab32c45be4;hpb=299af4f2047e767e5d79501c26444473bda64c64;p=chaz%2Fyoink diff --git a/src/Moof/Packet.cc b/src/moof/packet.cc similarity index 60% rename from src/Moof/Packet.cc rename to src/moof/packet.cc index 437438e..0440b7d 100644 --- a/src/Moof/Packet.cc +++ b/src/moof/packet.cc @@ -23,7 +23,7 @@ #include -#include "Packet.hh" +#include "packet.hh" #ifndef bswap_16 @@ -92,116 +92,94 @@ static uint64_t ntohll(uint64_t x) } -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(value); } -Packet& Packet::operator<<(int16_t value) +packet& packet::operator << (int16_t value) { return *this << reinterpret_cast(value); } -Packet& Packet::operator<<(int32_t value) +packet& packet::operator << (int32_t value) { return *this << reinterpret_cast(value); } -Packet& Packet::operator<<(int64_t value) +packet& packet::operator << (int64_t value) { return *this << reinterpret_cast(value); } -Packet& Packet::operator<<(uint8_t value) +packet& packet::operator << (uint8_t value) { if (write(&value, sizeof(value)) != sizeof(value)) { @@ -210,7 +188,7 @@ Packet& Packet::operator<<(uint8_t 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)) @@ -220,7 +198,7 @@ Packet& Packet::operator<<(uint16_t 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)) @@ -230,7 +208,7 @@ Packet& Packet::operator<<(uint32_t 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)) @@ -240,7 +218,7 @@ Packet& Packet::operator<<(uint64_t value) return *this; } -Packet& Packet::operator<<(float value) +packet& packet::operator << (float value) { // XXX: assumes the ieee-754 uint32_t* integer = reinterpret_cast(&value); @@ -252,7 +230,7 @@ Packet& Packet::operator<<(float value) return *this; } -Packet& Packet::operator<<(double value) +packet& packet::operator << (double value) { // XXX: assumes the ieee-754 uint64_t* integer = reinterpret_cast(&value); @@ -264,66 +242,66 @@ Packet& Packet::operator<<(double 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(value); } -Packet& Packet::operator>>(int16_t& value) +packet& packet::operator >> (int16_t& value) { return *this >> reinterpret_cast(value); } -Packet& Packet::operator>>(int32_t& value) +packet& packet::operator >> (int32_t& value) { return *this >> reinterpret_cast(value); } -Packet& Packet::operator>>(int64_t& value) +packet& packet::operator >> (int64_t& value) { return *this >> reinterpret_cast(value); } -Packet& Packet::operator>>(uint8_t& value) +packet& packet::operator >> (uint8_t& value) { if (read(&value, sizeof(value)) != sizeof(value)) { @@ -332,7 +310,7 @@ Packet& Packet::operator>>(uint8_t& value) return *this; } -Packet& Packet::operator>>(uint16_t& value) +packet& packet::operator >> (uint16_t& value) { if (read(&value, sizeof(value)) != sizeof(value)) { @@ -342,7 +320,7 @@ Packet& Packet::operator>>(uint16_t& value) return *this; } -Packet& Packet::operator>>(uint32_t& value) +packet& packet::operator >> (uint32_t& value) { if (read(&value, sizeof(value)) != sizeof(value)) { @@ -352,7 +330,7 @@ Packet& Packet::operator>>(uint32_t& value) return *this; } -Packet& Packet::operator>>(uint64_t& value) +packet& packet::operator >> (uint64_t& value) { if (read(&value, sizeof(value)) != sizeof(value)) { @@ -362,7 +340,7 @@ Packet& Packet::operator>>(uint64_t& value) return *this; } -Packet& Packet::operator>>(float& value) +packet& packet::operator >> (float& value) { // XXX: assumes the ieee-754 uint32_t* integer = reinterpret_cast(&value); @@ -374,7 +352,7 @@ Packet& Packet::operator>>(float& value) return *this; } -Packet& Packet::operator>>(double& value) +packet& packet::operator >> (double& value) { // XXX: assumes the ieee-754 uint64_t* integer = reinterpret_cast(&value); @@ -386,36 +364,35 @@ Packet& Packet::operator>>(double& 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