LCOV - code coverage report
Current view: directory - cygdrive/c/program files/microsoft visual studio 9.0/vc/include - xmemory (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 48 46 95.8 %
Date: 2014-09-25 Functions: 0 0 -

       1                 : // xmemory internal header (from <memory>)

       2                 : #pragma once
       3                 : #ifndef _XMEMORY_
       4                 : #define _XMEMORY_
       5                 : #ifndef RC_INVOKED
       6                 : #include <cstdlib>
       7                 : #include <exception>
       8                 : #include <new>
       9                 : #include <xutility>
      10                 : 
      11                 : #ifdef  _MSC_VER
      12                 :  #pragma pack(push,_CRT_PACKING)
      13                 :  #pragma warning(push,3)
      14                 :  #pragma warning(disable: 4100)
      15                 : #endif  /* _MSC_VER */
      16                 : 
      17                 : #ifndef _FARQ   /* specify standard memory model */
      18                 :  #define _FARQ
      19                 :  #define _PDFT  ptrdiff_t
      20                 :  #define _SIZT  size_t
      21                 : #endif /* _FARQ */
      22                 : 
      23                 :  #define _CPOINTER_X(T, A)              \
      24                 :         typename A::template rebind<T>::other::const_pointer
      25                 :  #define _CREFERENCE_X(T, A)    \
      26                 :         typename A::template rebind<T>::other::const_reference
      27                 :  #define _POINTER_X(T, A)       \
      28                 :         typename A::template rebind<T>::other::pointer
      29                 :  #define _REFERENCE_X(T, A)     \
      30                 :         typename A::template rebind<T>::other::reference
      31                 : 
      32                 : _STD_BEGIN
      33                 :                 // TEMPLATE FUNCTION _Allocate
      34                 : template<class _Ty> inline
      35                 :         _Ty _FARQ *_Allocate(_SIZT _Count, _Ty _FARQ *)
      36              74 :         {       // check for integer overflow

      37              74 :         if (_Count <= 0)

      38               0 :                 _Count = 0;

      39              74 :         else if (((_SIZT)(-1) / _Count) < sizeof (_Ty))

      40               0 :                 _THROW_NCEE(std::bad_alloc, NULL);

      41                 : 
      42                 :                 // allocate storage for _Count elements of type _Ty
      43              74 :         return ((_Ty _FARQ *)::operator new(_Count * sizeof (_Ty)));

      44              74 :         }

      45                 : 
      46                 :                 // TEMPLATE FUNCTION _Construct
      47                 : template<class _T1,
      48                 :         class _T2> inline
      49                 :         void _Construct(_T1 _FARQ *_Ptr, const _T2& _Val)
      50              15 :         {       // construct object at _Ptr with value _Val

      51              15 :         void _FARQ *_Vptr = _Ptr;

      52              15 :         ::new (_Vptr) _T1(_Val);

      53              15 :         }

      54                 : 
      55                 :                 // TEMPLATE FUNCTION _Destroy
      56                 : template<class _Ty> inline
      57                 :         void _Destroy(_Ty _FARQ *_Ptr)
      58              15 :         {       // destroy object at _Ptr

      59              12 :         _DESTRUCTOR(_Ty, _Ptr);

      60              15 :         }

      61                 : 
      62                 : template<> inline
      63                 :         void _Destroy(char _FARQ *)
      64                 :         {       // destroy a char (do nothing)
      65                 :         }
      66                 : 
      67                 : template<> inline
      68                 :         void _Destroy(wchar_t _FARQ *)
      69                 :         {       // destroy a wchar_t (do nothing)
      70                 :         }
      71                 : 
      72                 : 
      73                 :                 // TEMPLATE CLASS _Allocator_base
      74                 : template<class _Ty>
      75                 :         struct _Allocator_base
      76                 :         {       // base class for generic allocators
      77                 :         typedef _Ty value_type;
      78                 :         };
      79                 : 
      80                 :                 // TEMPLATE CLASS _Allocator_base<const _Ty>
      81                 : template<class _Ty>
      82                 :         struct _Allocator_base<const _Ty>
      83                 :         {       // base class for generic allocators for const _Ty
      84                 :         typedef _Ty value_type;
      85                 :         };
      86                 : 
      87                 :                 // TEMPLATE CLASS allocator
      88                 : template<class _Ty>
      89                 :         class allocator
      90                 :                 : public _Allocator_base<_Ty>
      91                 :         {       // generic allocator for objects of class _Ty
      92                 : public:
      93                 :         typedef _Allocator_base<_Ty> _Mybase;
      94                 :         typedef typename _Mybase::value_type value_type;
      95                 :         typedef value_type _FARQ *pointer;
      96                 :         typedef value_type _FARQ& reference;
      97                 :         typedef const value_type _FARQ *const_pointer;
      98                 :         typedef const value_type _FARQ& const_reference;
      99                 : 
     100                 :         typedef _SIZT size_type;
     101                 :         typedef _PDFT difference_type;
     102                 : 
     103                 :         template<class _Other>
     104                 :                 struct rebind
     105                 :                 {       // convert an allocator<_Ty> to an allocator <_Other>
     106                 :                 typedef allocator<_Other> other;
     107                 :                 };
     108                 : 
     109                 :         pointer address(reference _Val) const
     110                 :                 {       // return address of mutable _Val
     111                 :                 return (&_Val);
     112                 :                 }
     113                 : 
     114                 :         const_pointer address(const_reference _Val) const
     115                 :                 {       // return address of nonmutable _Val
     116                 :                 return (&_Val);
     117                 :                 }
     118                 : 
     119             121 :         allocator() _THROW0()

     120                 :                 {       // construct default allocator (do nothing)
     121             121 :                 }

     122                 : 
     123             121 :         allocator(const allocator<_Ty>&) _THROW0()

     124                 :                 {       // construct by copying (do nothing)
     125             121 :                 }

     126                 : 
     127                 :         template<class _Other>
     128               4 :                 allocator(const allocator<_Other>&) _THROW0()

     129                 :                 {       // construct from a related allocator (do nothing)
     130               4 :                 }

     131                 : 
     132                 :         template<class _Other>
     133                 :                 allocator<_Ty>& operator=(const allocator<_Other>&)
     134                 :                 {       // assign from a related allocator (do nothing)
     135                 :                 return (*this);
     136                 :                 }
     137                 : 
     138                 :         void deallocate(pointer _Ptr, size_type)
     139              73 :                 {       // deallocate object at _Ptr, ignore size

     140              73 :                 ::operator delete(_Ptr);

     141              73 :                 }

     142                 : 
     143                 :         pointer allocate(size_type _Count)
     144              74 :                 {       // allocate array of _Count elements

     145              74 :                 return (_Allocate(_Count, (pointer)0));

     146              74 :                 }

     147                 : 
     148                 :         pointer allocate(size_type _Count, const void _FARQ *)
     149                 :                 {       // allocate array of _Count elements, ignore hint
     150                 :                 return (allocate(_Count));
     151                 :                 }
     152                 : 
     153                 :         void construct(pointer _Ptr, const _Ty& _Val)
     154              15 :                 {       // construct object at _Ptr with value _Val

     155              15 :                 _Construct(_Ptr, _Val);

     156              15 :                 }

     157                 : 
     158                 :         void destroy(pointer _Ptr)
     159              15 :                 {       // destroy object at _Ptr

     160              15 :                 _Destroy(_Ptr);

     161              15 :                 }

     162                 : 
     163                 :         _SIZT max_size() const _THROW0()
     164              75 :                 {       // estimate maximum array size

     165              75 :                 _SIZT _Count = (_SIZT)(-1) / sizeof (_Ty);

     166              75 :                 return (0 < _Count ? _Count : 1);

     167              75 :                 }

     168                 :         };
     169                 : 
     170                 :                 // allocator TEMPLATE OPERATORS
     171                 : template<class _Ty,
     172                 :         class _Other> inline
     173                 :         bool operator==(const allocator<_Ty>&, const allocator<_Other>&) _THROW0()
     174               5 :         {       // test for allocator equality (always true)

     175               5 :         return (true);

     176               5 :         }

     177                 : 
     178                 : template<class _Ty,
     179                 :         class _Other> inline
     180                 :         bool operator!=(const allocator<_Ty>&, const allocator<_Other>&) _THROW0()
     181                 :         {       // test for allocator inequality (always false)
     182                 :         return (false);
     183                 :         }
     184                 : 
     185                 :                 // CLASS allocator<void>
     186                 : template<> class _CRTIMP2_PURE allocator<void>
     187                 :         {       // generic allocator for type void
     188                 : public:
     189                 :         typedef void _Ty;
     190                 :         typedef _Ty _FARQ *pointer;
     191                 :         typedef const _Ty _FARQ *const_pointer;
     192                 :         typedef _Ty value_type;
     193                 : 
     194                 :         template<class _Other>
     195                 :                 struct rebind
     196                 :                 {       // convert an allocator<void> to an allocator <_Other>
     197                 :                 typedef allocator<_Other> other;
     198                 :                 };
     199                 : 
     200                 :         allocator() _THROW0()
     201                 :                 {       // construct default allocator (do nothing)
     202                 :                 }
     203                 : 
     204                 :         allocator(const allocator<_Ty>&) _THROW0()
     205                 :                 {       // construct by copying (do nothing)
     206                 :                 }
     207                 : 
     208                 :         template<class _Other>
     209                 :                 allocator(const allocator<_Other>&) _THROW0()
     210                 :                 {       // construct from related allocator (do nothing)
     211                 :                 }
     212                 : 
     213                 :         template<class _Other>
     214                 :                 allocator<_Ty>& operator=(const allocator<_Other>&)
     215                 :                 {       // assign from a related allocator (do nothing)
     216                 :                 return (*this);
     217                 :                 }
     218                 :         };
     219                 : 
     220                 :                 // TEMPLATE FUNCTION _Destroy_range
     221                 : template<class _Alloc> inline
     222                 :         void _Destroy_range(typename _Alloc::pointer _First,
     223                 :                 typename _Alloc::pointer _Last, _Alloc& _Al)
     224              54 :         {       // destroy [_First, _Last)

     225              54 :         _Destroy_range(_First, _Last, _Al, _Ptr_cat(_First, _Last));

     226              54 :         }

     227                 : 
     228                 : template<class _Alloc> inline
     229                 :         void _Destroy_range(typename _Alloc::pointer _First,
     230                 :                 typename _Alloc::pointer _Last, _Alloc& _Al,
     231                 :                 _Nonscalar_ptr_iterator_tag)
     232              13 :         {       // destroy [_First, _Last), arbitrary type

     233              13 :         for (; _First != _Last; ++_First)

     234              13 :                 _Al.destroy(_First);

     235              13 :         }

     236                 : 
     237                 : template<class _Alloc> inline
     238                 :         void _Destroy_range(typename _Alloc::pointer _First,
     239                 :                 typename _Alloc::pointer _Last, _Alloc& _Al,
     240                 :                 _Scalar_ptr_iterator_tag)
     241              41 :         {       // destroy [_First, _Last), scalar type (do nothing)

     242              41 :         }

     243                 : _STD_END
     244                 : 
     245                 : #ifdef _MSC_VER
     246                 :  #pragma warning(default: 4100)
     247                 :  #pragma warning(pop)
     248                 :  #pragma pack(pop)
     249                 : #endif  /* _MSC_VER */
     250                 : 
     251                 : #endif /* RC_INVOKED */
     252                 : #endif /* _XMEMORY_ */
     253                 : 
     254                 : /*
     255                 :  * Copyright (c) 1992-2007 by P.J. Plauger.  ALL RIGHTS RESERVED.
     256                 :  * Consult your license regarding permissions and restrictions.
     257                 :  */
     258                 : 
     259                 : /*
     260                 :  * This file is derived from software bearing the following
     261                 :  * restrictions:
     262                 :  *
     263                 :  * Copyright (c) 1994
     264                 :  * Hewlett-Packard Company
     265                 :  *
     266                 :  * Permission to use, copy, modify, distribute and sell this
     267                 :  * software and its documentation for any purpose is hereby
     268                 :  * granted without fee, provided that the above copyright notice
     269                 :  * appear in all copies and that both that copyright notice and
     270                 :  * this permission notice appear in supporting documentation.
     271                 :  * Hewlett-Packard Company makes no representations about the
     272                 :  * suitability of this software for any purpose. It is provided
     273                 :  * "as is" without express or implied warranty.
     274                 :  V5.03:0009 */

Generated by: LCOV version 1.7