Whole document tree
    

Whole document tree

defalloc.h Source File
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

defalloc.h

Go to the documentation of this file.
00001 // Backward-compat support -*- C++ -*-
00002 
00003 // Copyright (C) 2001 Free Software Foundation, Inc.
00004 //
00005 // This file is part of the GNU ISO C++ Library.  This library is free
00006 // software; you can redistribute it and/or modify it under the
00007 // terms of the GNU General Public License as published by the
00008 // Free Software Foundation; either version 2, or (at your option)
00009 // any later version.
00010 
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 // GNU General Public License for more details.
00015 
00016 // You should have received a copy of the GNU General Public License along
00017 // with this library; see the file COPYING.  If not, write to the Free
00018 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
00019 // USA.
00020 
00021 // As a special exception, you may use this file as part of a free software
00022 // library without restriction.  Specifically, if other files instantiate
00023 // templates or use macros or inline functions from this file, or you compile
00024 // this file and link it with other files to produce an executable, this
00025 // file does not by itself cause the resulting executable to be covered by
00026 // the GNU General Public License.  This exception does not however
00027 // invalidate any other reasons why the executable file might be covered by
00028 // the GNU General Public License.
00029 
00030 /*
00031  *
00032  * Copyright (c) 1994
00033  * Hewlett-Packard Company
00034  *
00035  * Permission to use, copy, modify, distribute and sell this software
00036  * and its documentation for any purpose is hereby granted without fee,
00037  * provided that the above copyright notice appear in all copies and
00038  * that both that copyright notice and this permission notice appear
00039  * in supporting documentation.  Hewlett-Packard Company makes no
00040  * representations about the suitability of this software for any
00041  * purpose.  It is provided "as is" without express or implied warranty.
00042  *
00043  */
00044 
00045 // Inclusion of this file is DEPRECATED.  This is the original HP
00046 // default allocator.  It is provided only for backward compatibility.
00047 // This file WILL BE REMOVED in a future release.
00048 //
00049 // DO NOT USE THIS FILE unless you have an old container implementation
00050 // that requires an allocator with the HP-style interface.  
00051 //
00052 // Standard-conforming allocators have a very different interface.  The
00053 // standard default allocator is declared in the header <memory>.
00054 
00055 #ifndef _CPP_BACKWARD_DEFALLOC_H
00056 #define _CPP_BACKWARD_DEFALLOC_H 1
00057 
00058 #include "backward_warning.h"
00059 #include "new.h"
00060 #include <stddef.h>
00061 #include <stdlib.h>
00062 #include <limits.h> 
00063 #include "iostream.h" 
00064 #include "algobase.h"
00065 
00066 
00067 template <class _Tp>
00068 inline _Tp* allocate(ptrdiff_t __size, _Tp*) {
00069     set_new_handler(0);
00070     _Tp* __tmp = (_Tp*)(::operator new((size_t)(__size * sizeof(_Tp))));
00071     if (__tmp == 0) {
00072     cerr << "out of memory" << endl; 
00073     exit(1);
00074     }
00075     return __tmp;
00076 }
00077 
00078 
00079 template <class _Tp>
00080 inline void deallocate(_Tp* __buffer) {
00081     ::operator delete(__buffer);
00082 }
00083 
00084 template <class _Tp>
00085 class allocator {
00086 public:
00087     typedef _Tp value_type;
00088     typedef _Tp* pointer;
00089     typedef const _Tp* const_pointer;
00090     typedef _Tp& reference;
00091     typedef const _Tp& const_reference;
00092     typedef size_t size_type;
00093     typedef ptrdiff_t difference_type;
00094     pointer allocate(size_type __n) { 
00095     return ::allocate((difference_type)__n, (pointer)0);
00096     }
00097     void deallocate(pointer __p) { ::deallocate(__p); }
00098     pointer address(reference __x) { return (pointer)&__x; }
00099     const_pointer const_address(const_reference __x) { 
00100     return (const_pointer)&__x; 
00101     }
00102     size_type init_page_size() { 
00103     return max(size_type(1), size_type(4096/sizeof(_Tp))); 
00104     }
00105     size_type max_size() const { 
00106     return max(size_type(1), size_type(UINT_MAX/sizeof(_Tp))); 
00107     }
00108 };
00109 
00110 class allocator<void> {
00111 public:
00112     typedef void* pointer;
00113 };
00114 
00115 
00116 
00117 #endif /* _CPP_BACKWARD_DEFALLOC_H */

Generated on Mon Apr 8 03:11:24 2002 for libstdc++-v3 Source by doxygen1.2.15