/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /** \file * \ingroup memutil */ #ifndef __MEM_ALLOCATOR_H__ #define __MEM_ALLOCATOR_H__ #include "guardedalloc/MEM_guardedalloc.h" #include template struct MEM_Allocator { typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp *pointer; typedef const _Tp *const_pointer; typedef _Tp &reference; typedef const _Tp &const_reference; typedef _Tp value_type; template struct rebind { typedef MEM_Allocator<_Tp1> other; }; MEM_Allocator() throw() { } MEM_Allocator(const MEM_Allocator &) throw() { } template MEM_Allocator(const MEM_Allocator<_Tp1>) throw() { } ~MEM_Allocator() throw() { } pointer address(reference __x) const { return &__x; } const_pointer address(const_reference __x) const { return &__x; } /* NOTE: `__n` is permitted to be 0. * The C++ standard says nothing about what the return value is when `__n == 0`. */ _Tp *allocate(size_type __n, const void * = 0) { _Tp *__ret = NULL; if (__n) __ret = static_cast<_Tp *>(MEM_mallocN(__n * sizeof(_Tp), "STL MEM_Allocator")); return __ret; } // __p is not permitted to be a null pointer. void deallocate(pointer __p, size_type) { MEM_freeN(__p); } size_type max_size() const throw() { return size_t(-1) / sizeof(_Tp); } void construct(pointer __p, const _Tp &__val) { new (__p) _Tp(__val); } void destroy(pointer __p) { __p->~_Tp(); } }; #endif // __MEM_ALLOCATOR_H__