Home | History | Annotate | Download | only in std
      1 namespace std
      2 {
      3   /**
      4    *  @brief  The "standard" allocator, as per [20.4].
      5    *
      6    *  The private _Alloc is "SGI" style.  (See comments at the top
      7    *  of stl_alloc.h.)
      8    *
      9    *  The underlying allocator behaves as follows.
     10    *    - __default_alloc_template is used via two typedefs
     11    *    - "__single_client_alloc" typedef does no locking for threads
     12    *    - "__alloc" typedef is threadsafe via the locks
     13    *    - __new_alloc is used for memory requests
     14    *
     15    *  (See @link Allocators allocators info @endlink for more.)
     16    */
     17   template<typename _Tp>
     18     class allocator
     19     {
     20     public:
     21       typedef size_t     size_type;
     22       typedef ptrdiff_t  difference_type;
     23       typedef _Tp*       pointer;
     24       typedef const _Tp* const_pointer;
     25       typedef _Tp&       reference;
     26       typedef const _Tp& const_reference;
     27       typedef _Tp        value_type;
     28 
     29       template<typename _Tp1>
     30         struct rebind;
     31 
     32       allocator() throw();
     33 
     34       allocator(const allocator&) throw();
     35       template<typename _Tp1>
     36         allocator(const allocator<_Tp1>&) throw();
     37       ~allocator() throw();
     38 
     39 
     40       pointer
     41       address(reference __x) const;
     42 
     43 
     44       const_pointer
     45       address(const_reference __x) const;
     46 
     47 
     48       // NB: __n is permitted to be 0.  The C++ standard says nothing
     49       // about what the return value is when __n == 0.
     50       _Tp*
     51       allocate(size_type __n, const void* = 0);
     52 
     53       // __p is not permitted to be a null pointer.
     54       void
     55       deallocate(pointer __p, size_type __n);
     56 
     57       size_type
     58       max_size() const throw();
     59 
     60       void construct(pointer __p, const _Tp& __val);
     61       void destroy(pointer __p);
     62     };
     63 
     64   template<>
     65     class allocator<void>
     66     {
     67     public:
     68       typedef size_t      size_type;
     69       typedef ptrdiff_t   difference_type;
     70       typedef void*       pointer;
     71       typedef const void* const_pointer;
     72       typedef void        value_type;
     73 
     74       template<typename _Tp1>
     75         struct rebind;
     76     };
     77 } // namespace std
     78