X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Futil%2Fpointer.h;h=d29ec87399b0ada78530401e61c2b55dfeb1a124;hb=68f9263a24a345435d2310ab559ce8a811ef0427;hp=96f4c656b6372cff6c0b08e8f2a03d19ba2e0aa2;hpb=497ff1ecd64c8908f988e15ca879824f2781e3fd;p=dragonfireclient.git diff --git a/src/util/pointer.h b/src/util/pointer.h index 96f4c656b..d29ec8739 100644 --- a/src/util/pointer.h +++ b/src/util/pointer.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2012 celeron55, Perttu Ahola +Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,87 +17,12 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef UTIL_POINTER_HEADER -#define UTIL_POINTER_HEADER +#pragma once -#include "../irrlichttypes.h" -#include "../debug.h" // For assert() +#include "irrlichttypes.h" +#include "debug.h" // For assert() #include -template -class SharedPtr -{ -public: - SharedPtr(T *t=NULL) - { - refcount = new int; - *refcount = 1; - ptr = t; - } - SharedPtr(SharedPtr &t) - { - //*this = t; - drop(); - refcount = t.refcount; - (*refcount)++; - ptr = t.ptr; - } - ~SharedPtr() - { - drop(); - } - SharedPtr & operator=(T *t) - { - drop(); - refcount = new int; - *refcount = 1; - ptr = t; - return *this; - } - SharedPtr & operator=(SharedPtr &t) - { - drop(); - refcount = t.refcount; - (*refcount)++; - ptr = t.ptr; - return *this; - } - T* operator->() - { - return ptr; - } - T & operator*() - { - return *ptr; - } - bool operator!=(T *t) - { - return ptr != t; - } - bool operator==(T *t) - { - return ptr == t; - } - T & operator[](unsigned int i) - { - return ptr[i]; - } -private: - void drop() - { - assert((*refcount) > 0); - (*refcount)--; - if(*refcount == 0) - { - delete refcount; - if(ptr != NULL) - delete ptr; - } - } - T *ptr; - int *refcount; -}; - template class Buffer { @@ -171,13 +96,19 @@ class Buffer private: void drop() { - if(data) - delete[] data; + delete[] data; } T *data; unsigned int m_size; }; +/************************************************ + * !!! W A R N I N G !!! * + * * + * This smart pointer class is NOT thread safe. * + * ONLY use in a single-threaded context! * + * * + ************************************************/ template class SharedBuffer { @@ -197,11 +128,11 @@ class SharedBuffer else data = NULL; refcount = new unsigned int; + memset(data,0,sizeof(T)*m_size); (*refcount) = 1; } SharedBuffer(const SharedBuffer &buffer) { - //std::cout<<"SharedBuffer(const SharedBuffer &buffer)"< &buffer) { m_size = buffer.getSize(); - if(m_size != 0) - { - data = new T[m_size]; - memcpy(data, *buffer, buffer.getSize()); + if (m_size != 0) { + data = new T[m_size]; + memcpy(data, *buffer, buffer.getSize()); } else data = NULL; @@ -257,7 +186,7 @@ class SharedBuffer } T & operator[](unsigned int i) const { - //assert(i < m_size) + assert(i < m_size); return data[i]; } T * operator*() const @@ -279,8 +208,7 @@ class SharedBuffer (*refcount)--; if(*refcount == 0) { - if(data) - delete[] data; + delete[] data; delete refcount; } } @@ -288,12 +216,3 @@ class SharedBuffer unsigned int m_size; unsigned int *refcount; }; - -inline SharedBuffer SharedBufferFromString(const char *string) -{ - SharedBuffer b((u8*)string, strlen(string)+1); - return b; -} - -#endif -