From fd00d50574064db9edfcccc4286ed8f1b55b185a Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Wed, 15 May 2013 15:48:59 -0700 Subject: Alter memory management in login server --- src/common/dumb_ptr.hpp | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'src/common/dumb_ptr.hpp') diff --git a/src/common/dumb_ptr.hpp b/src/common/dumb_ptr.hpp index d0b35f2..91293c6 100644 --- a/src/common/dumb_ptr.hpp +++ b/src/common/dumb_ptr.hpp @@ -21,6 +21,8 @@ #include "sanity.hpp" +#include + // unmanaged new/delete-able pointer // should be replaced by std::unique_ptr template @@ -64,11 +66,11 @@ public: } explicit - operator bool() + operator bool() const { return impl; } - bool operator !() + bool operator !() const { return !impl; } @@ -95,12 +97,12 @@ public: } void new_(size_t z) { - impl = new T[z]; + impl = new T[z](); } static dumb_ptr make(size_t z) { - return dumb_ptr(new T[z], z); + return dumb_ptr(new T[z](), z); } void forget() { @@ -108,17 +110,35 @@ public: sz = 0; } + size_t size() const + { + return sz; + } + void resize(size_t z) + { + if (z == sz) + return; + T *np = new T[z](); + // not exception-safe, but we don't have a dtor anyway + size_t i = std::min(z, sz); + while (i-->0) + np[i] = std::move(impl[i]); + delete[] impl; + impl = np; + sz = z; + } + T& operator[](size_t i) const { return impl[i]; } explicit - operator bool() + operator bool() const { return impl; } - bool operator !() + bool operator !() const { return !impl; } -- cgit v1.2.3-60-g2f50