From a535453d0378fc6674b5af9eac8e608d907a8f9f Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 18 Jun 2007 16:27:43 +0000 Subject: bugfix @buffer resize added buffer resizefront & back added package --- buffer.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'buffer.cpp') diff --git a/buffer.cpp b/buffer.cpp index 3f6fe7c..1b194bd 100644 --- a/buffer.cpp +++ b/buffer.cpp @@ -85,7 +85,7 @@ void Buffer::operator=(const Buffer &src) length_ = 0; } -u_int32_t Buffer::resize(u_int32_t new_length) +u_int32_t Buffer::resizeFront(u_int32_t new_length) { if(length_ == new_length) return length_; @@ -96,7 +96,34 @@ u_int32_t Buffer::resize(u_int32_t new_length) if(buf_) { - std::memcpy(tmp, buf_, length_); + u_int8_t *src=buf_, *dest=tmp; + if(length_ < new_length) + dest = &dest[new_length - length_]; + else + src = &src[length_ - new_length]; + u_int32_t len = length_ < new_length ? length_ : new_length; + std::memcpy(dest, src, len); + delete[] buf_; + } + + length_ = new_length; + buf_ = tmp; + return length_; +} + +u_int32_t Buffer::resizeBack(u_int32_t new_length) +{ + if(length_ == new_length) + return length_; + + u_int8_t *tmp = new u_int8_t[new_length]; + if(!tmp) + return length_; + + if(buf_) + { + u_int32_t len = length_ < new_length ? length_ : new_length; + std::memcpy(tmp, buf_, len); delete[] buf_; } -- cgit v1.2.3