defalloc.h
上传用户:sichengcw
上传日期:2009-02-17
资源大小:202k
文件大小:2k
源码类别:

STL

开发平台:

Visual C++

  1. /*
  2.  *
  3.  * Copyright (c) 1994
  4.  * Hewlett-Packard Company
  5.  *
  6.  * Permission to use, copy, modify, distribute and sell this software
  7.  * and its documentation for any purpose is hereby granted without fee,
  8.  * provided that the above copyright notice appear in all copies and
  9.  * that both that copyright notice and this permission notice appear
  10.  * in supporting documentation.  Hewlett-Packard Company makes no
  11.  * representations about the suitability of this software for any
  12.  * purpose.  It is provided "as is" without express or implied warranty.
  13.  *
  14.  */
  15. // Inclusion of this file is DEPRECATED.  This is the original HP
  16. // default allocator.  It is provided only for backward compatibility.
  17. // 
  18. // DO NOT USE THIS FILE unless you have an old container implementation
  19. // that requires an allocator with the HP-style interface.  SGI STL
  20. // uses a different allocator interface.  SGI-style allocators are not
  21. // parametrized with respect to the object type; they traffic in void *
  22. // pointers.  This file is not included by any other SGI STL header.
  23. #ifndef DEFALLOC_H
  24. #define DEFALLOC_H
  25. #include <new.h>
  26. #include <stddef.h>
  27. #include <stdlib.h>
  28. #include <limits.h>
  29. #include <iostream.h>
  30. #include <algobase.h>
  31. template <class T>
  32. inline T* allocate(ptrdiff_t size, T*) {
  33.     set_new_handler(0);
  34.     T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
  35.     if (tmp == 0) {
  36. cerr << "out of memory" << endl; 
  37. exit(1);
  38.     }
  39.     return tmp;
  40. }
  41. template <class T>
  42. inline void deallocate(T* buffer) {
  43.     ::operator delete(buffer);
  44. }
  45. template <class T>
  46. class allocator {
  47. public:
  48.     typedef T value_type;
  49.     typedef T* pointer;
  50.     typedef const T* const_pointer;
  51.     typedef T& reference;
  52.     typedef const T& const_reference;
  53.     typedef size_t size_type;
  54.     typedef ptrdiff_t difference_type;
  55.     pointer allocate(size_type n) { 
  56. return ::allocate((difference_type)n, (pointer)0);
  57.     }
  58.     void deallocate(pointer p) { ::deallocate(p); }
  59.     pointer address(reference x) { return (pointer)&x; }
  60.     const_pointer const_address(const_reference x) { 
  61. return (const_pointer)&x; 
  62.     }
  63.     size_type init_page_size() { 
  64. return max(size_type(1), size_type(4096/sizeof(T))); 
  65.     }
  66.     size_type max_size() const { 
  67. return max(size_type(1), size_type(UINT_MAX/sizeof(T))); 
  68.     }
  69. };
  70. class allocator<void> {
  71. public:
  72.     typedef void* pointer;
  73. };
  74. #endif