phoenix-firestorm/indra/llcommon/nd/ndstlallocator.h

92 lines
2.4 KiB
C++

#ifndef NDSTLALLOCATOR_H
#define NDSTLALLOCATOR_H
/**
* $LicenseInfo:firstyear=2013&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2013, Nicky Dasmijn
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
* $/LicenseInfo$
*/
#include <limits>
#include <stdlib.h>
#include <cstddef>
namespace nd
{
namespace stl
{
template <typename T> class allocator
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef const T* const_pointer;
typedef T& reference;
typedef const T& const_reference;
typedef T value_type;
template <typename V> struct rebind
{ typedef allocator<V> other; };
pointer address (reference value) const
{ return &value; }
const_pointer address (const_reference value) const
{ return &value; }
allocator()
{ }
allocator(const allocator&)
{ }
template <typename V> allocator (const allocator<V>&)
{ }
~allocator()
{ }
size_type max_size () const
{ return std::numeric_limits<size_t>::max() / sizeof(T); }
pointer allocate (size_type num)
{ return (pointer) ::malloc (num*sizeof(T)); }
void construct (pointer p, const T& value)
{ new((void*)p)T(value); }
void destroy (pointer p)
{ p->~T(); }
void deallocate (pointer p, size_type num)
{ ::free((void*)p); }
};
template <typename T1, typename T2> bool operator== (const allocator<T1>&, const allocator<T2>&)
{ return true; }
template <typename T1, typename T2> bool operator!= (const allocator<T1>&, const allocator<T2>&)
{ return false; }
}
}
#endif