X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FPacket.cc;h=842d6c1d9e9406d89dcf488b61b5df6f8b0a8cb1;hp=8cd45b53baff4e71a9e5ac5a4e3381ebb59972b4;hb=7ade2da0367685e098181d7124c9ba145a010626;hpb=e434d5eee9eaf196a5f4bb8c6118b6be3b84a421 diff --git a/src/Moof/Packet.cc b/src/Moof/Packet.cc index 8cd45b5..842d6c1 100644 --- a/src/Moof/Packet.cc +++ b/src/Moof/Packet.cc @@ -103,9 +103,7 @@ Packet::Packet(size_t size) : mBoolR(0), mBoolW(0), mBoolNumR(0), - mBoolNumW(0) -{ -} + mBoolNumW(0) {} Packet::Packet(const char* data, size_t size) : mBuffer((char*)malloc(size)), @@ -117,7 +115,37 @@ Packet::Packet(const char* data, size_t size) : mBoolNumR(0), mBoolNumW(0) { - memcpy(mBuffer, data, size); + if (mBuffer) memcpy(mBuffer, data, size); +} + + +Packet::Packet(const Packet& copy) : + mBuffer((char*)malloc(copy.mSize)), + mSize(copy.mSize), + mR(copy.mR), + mW(copy.mW), + mBoolR(copy.mBoolR), + mBoolW(copy.mBoolW), + mBoolNumR(copy.mBoolNumR), + mBoolNumW(copy.mBoolNumW) +{ + if (mBuffer) memcpy(mBuffer, copy.mBuffer, mSize); +} + +Packet& Packet::operator=(const Packet& copy) +{ + free(mBuffer); + + mBuffer = (char*)malloc(copy.mSize); + mSize = copy.mSize; + mR = copy.mR; + mW = copy.mW; + mBoolR = copy.mBoolR; + mBoolW = copy.mBoolW; + mBoolNumR = copy.mBoolNumR; + mBoolNumW = copy.mBoolNumW; + if (mBuffer) memcpy(mBuffer, copy.mBuffer, mSize); + return *this; } @@ -227,7 +255,7 @@ size_t Packet::write(const void* bytes, size_t size) } if (!mBuffer) return 0; } - memcpy(&mBuffer[mW], bytes, nBytes); + memcpy(mBuffer + mW, bytes, nBytes); mW += nBytes; return nBytes; } @@ -318,11 +346,22 @@ Packet& Packet::operator>>(double& value) size_t Packet::read(void* bytes, size_t size) { size_t nBytes = std::min(size, mW - mR); - memcpy(bytes, &mBuffer[mR], nBytes); + memcpy(bytes, mBuffer + mR, nBytes); mR += nBytes; return nBytes; } +void Packet::clear() +{ + mR = 0; + mW = 0; + mBoolR = 0; + mBoolW = 0; + mBoolNumR = 0; + mBoolNumW = 0; +} + + } // namespace Mf