LCOV - code coverage report
Current view: top level - usr/include/irrlicht - irrAllocator.h (source / functions) Hit Total Coverage
Test: report Lines: 18 18 100.0 %
Date: 2015-07-11 18:23:49 Functions: 97 131 74.0 %

          Line data    Source code
       1             : // Copyright (C) 2002-2012 Nikolaus Gebhardt
       2             : // This file is part of the "Irrlicht Engine" and the "irrXML" project.
       3             : // For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h
       4             : 
       5             : #ifndef __IRR_ALLOCATOR_H_INCLUDED__
       6             : #define __IRR_ALLOCATOR_H_INCLUDED__
       7             : 
       8             : #include "irrTypes.h"
       9             : #include <new>
      10             : // necessary for older compilers
      11             : #include <memory.h>
      12             : 
      13             : namespace irr
      14             : {
      15             : namespace core
      16             : {
      17             : 
      18             : #ifdef DEBUG_CLIENTBLOCK
      19             : #undef DEBUG_CLIENTBLOCK
      20             : #define DEBUG_CLIENTBLOCK new
      21             : #endif
      22             : 
      23             : //! Very simple allocator implementation, containers using it can be used across dll boundaries
      24             : template<typename T>
      25     6937489 : class irrAllocator
      26             : {
      27             : public:
      28             : 
      29             :         //! Destructor
      30     6946657 :         virtual ~irrAllocator() {}
      31             : 
      32             :         //! Allocate memory for an array of objects
      33     1227482 :         T* allocate(size_t cnt)
      34             :         {
      35     1227482 :                 return (T*)internal_new(cnt* sizeof(T));
      36             :         }
      37             : 
      38             :         //! Deallocate memory for an array of objects
      39     8172377 :         void deallocate(T* ptr)
      40             :         {
      41     8172377 :                 internal_delete(ptr);
      42     8172360 :         }
      43             : 
      44             :         //! Construct an element
      45    58738490 :         void construct(T* ptr, const T&e)
      46             :         {
      47    58738490 :                 new ((void*)ptr) T(e);
      48    58738482 :         }
      49             : 
      50             :         //! Destruct an element
      51    64504747 :         void destruct(T* ptr)
      52             :         {
      53          58 :                 ptr->~T();
      54    64504747 :         }
      55             : 
      56             : protected:
      57             : 
      58     2802222 :         virtual void* internal_new(size_t cnt)
      59             :         {
      60     2802222 :                 return operator new(cnt);
      61             :         }
      62             : 
      63    10003375 :         virtual void internal_delete(void* ptr)
      64             :         {
      65    10003375 :                 operator delete(ptr);
      66    10003384 :         }
      67             : 
      68             : };
      69             : 
      70             : 
      71             : //! Fast allocator, only to be used in containers inside the same memory heap.
      72             : /** Containers using it are NOT able to be used it across dll boundaries. Use this
      73             : when using in an internal class or function or when compiled into a static lib */
      74             : template<typename T>
      75             : class irrAllocatorFast
      76             : {
      77             : public:
      78             : 
      79             :         //! Allocate memory for an array of objects
      80             :         T* allocate(size_t cnt)
      81             :         {
      82             :                 return (T*)operator new(cnt* sizeof(T));
      83             :         }
      84             : 
      85             :         //! Deallocate memory for an array of objects
      86             :         void deallocate(T* ptr)
      87             :         {
      88             :                 operator delete(ptr);
      89             :         }
      90             : 
      91             :         //! Construct an element
      92             :         void construct(T* ptr, const T&e)
      93             :         {
      94             :                 new ((void*)ptr) T(e);
      95             :         }
      96             : 
      97             :         //! Destruct an element
      98             :         void destruct(T* ptr)
      99             :         {
     100             :                 ptr->~T();
     101             :         }
     102             : };
     103             : 
     104             : 
     105             : 
     106             : #ifdef DEBUG_CLIENTBLOCK
     107             : #undef DEBUG_CLIENTBLOCK
     108             : #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
     109             : #endif
     110             : 
     111             : //! defines an allocation strategy
     112             : enum eAllocStrategy
     113             : {
     114             :         ALLOC_STRATEGY_SAFE    = 0,
     115             :         ALLOC_STRATEGY_DOUBLE  = 1,
     116             :         ALLOC_STRATEGY_SQRT    = 2
     117             : };
     118             : 
     119             : 
     120             : } // end namespace core
     121             : } // end namespace irr
     122             : 
     123             : #endif
     124             : 

Generated by: LCOV version 1.11