* warranty, and with no claim as to its suitability for any purpose.
*/
template <class T>
- class ModelAlloc {
- public:
- // type definitions
- typedef T value_type;
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef T& reference;
- typedef const T& const_reference;
- typedef size_t size_type;
- typedef size_t difference_type;
-
- // rebind allocator to type U
- template <class U>
- struct rebind {
- typedef ModelAlloc<U> other;
- };
-
- // return address of values
- pointer address (reference value) const {
- return &value;
- }
- const_pointer address (const_reference value) const {
- return &value;
- }
-
- /* constructors and destructor
- * - nothing to do because the allocator has no state
- */
- ModelAlloc() throw() {
- }
- ModelAlloc(const ModelAlloc&) throw() {
- }
- template <class U>
- ModelAlloc (const ModelAlloc<U>&) throw() {
- }
- ~ModelAlloc() throw() {
- }
-
- // return maximum number of elements that can be allocated
- size_type max_size () const throw() {
- return std::numeric_limits<size_t>::max() / sizeof(T);
- }
-
- // allocate but don't initialize num elements of type T
- pointer allocate (size_type num, const void* = 0) {
- pointer p = ( pointer )model_malloc( num * sizeof( T ) );
- return p;
- }
-
- // initialize elements of allocated storage p with value value
- void construct (pointer p, const T& value) {
- // initialize memory with placement new
- new((void*)p)T(value);
- }
-
- // destroy elements of initialized storage p
- void destroy (pointer p) {
- // destroy objects by calling their destructor
- p->~T();
- }
-
- // deallocate storage p of deleted elements
- void deallocate (pointer p, size_type num) {
- model_free((void*)p);
- }
- };
+class ModelAlloc {
+ public:
+ // type definitions
+ typedef T value_type;
+ typedef T* pointer;
+ typedef const T* const_pointer;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef size_t size_type;
+ typedef size_t difference_type;
+
+ // rebind allocator to type U
+ template <class U>
+ struct rebind {
+ typedef ModelAlloc<U> other;
+ };
+
+ // return address of values
+ pointer address(reference value) const {
+ return &value;
+ }
+ const_pointer address(const_reference value) const {
+ return &value;
+ }
+
+ /* constructors and destructor
+ * - nothing to do because the allocator has no state
+ */
+ ModelAlloc() throw() {
+ }
+ ModelAlloc(const ModelAlloc&) throw() {
+ }
+ template <class U>
+ ModelAlloc(const ModelAlloc<U>&) throw() {
+ }
+ ~ModelAlloc() throw() {
+ }
+
+ // return maximum number of elements that can be allocated
+ size_type max_size() const throw() {
+ return std::numeric_limits<size_t>::max() / sizeof(T);
+ }
+
+ // allocate but don't initialize num elements of type T
+ pointer allocate(size_type num, const void * = 0) {
+ pointer p = (pointer)model_malloc(num * sizeof(T));
+ return p;
+ }
+
+ // initialize elements of allocated storage p with value value
+ void construct(pointer p, const T& value) {
+ // initialize memory with placement new
+ new((void*)p)T(value);
+ }
+
+ // destroy elements of initialized storage p
+ void destroy(pointer p) {
+ // destroy objects by calling their destructor
+ p->~T();
+ }
+
+ // deallocate storage p of deleted elements
+ void deallocate(pointer p, size_type num) {
+ model_free((void*)p);
+ }
+};
/** Return that all specializations of this allocator are interchangeable. */
- template <class T1, class T2>
- bool operator== (const ModelAlloc<T1>&,
- const ModelAlloc<T2>&) throw() {
- return true;
- }
+template <class T1, class T2>
+bool operator== (const ModelAlloc<T1>&,
+ const ModelAlloc<T2>&) throw() {
+ return true;
+}
/** Return that all specializations of this allocator are interchangeable. */
- template <class T1, class T2>
- bool operator!= (const ModelAlloc<T1>&,
- const ModelAlloc<T2>&) throw() {
- return false;
- }
+template <class T1, class T2>
+bool operator!= (const ModelAlloc<T1>&,
+ const ModelAlloc<T2>&) throw() {
+ return false;
+}
#ifdef __cplusplus
extern "C" {