Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_cmemT 4 #ifndef tools_cmemT 5 #define tools_cmemT 5 #define tools_cmemT 6 6 7 #include <cstdlib> 7 #include <cstdlib> 8 8 9 #ifdef TOOLS_MEM 9 #ifdef TOOLS_MEM 10 #include "mem" 10 #include "mem" 11 #endif 11 #endif 12 12 13 namespace tools { 13 namespace tools { 14 14 15 template <class T> 15 template <class T> 16 inline void cmem_free(T*& a_p){ 16 inline void cmem_free(T*& a_p){ 17 if(!a_p) return; 17 if(!a_p) return; 18 ::free(a_p); 18 ::free(a_p); 19 a_p = NULL; 19 a_p = NULL; 20 #ifdef TOOLS_MEM 20 #ifdef TOOLS_MEM 21 mem::decrement("cmem"); 21 mem::decrement("cmem"); 22 #endif 22 #endif 23 } 23 } 24 24 25 template <class T> 25 template <class T> 26 inline T* cmem_alloc(size_t a_num){ 26 inline T* cmem_alloc(size_t a_num){ 27 if(a_num<=0) return 0; 27 if(a_num<=0) return 0; 28 T* p = (T*)::malloc(a_num*sizeof(T)); 28 T* p = (T*)::malloc(a_num*sizeof(T)); 29 if(!p) return 0; 29 if(!p) return 0; 30 #ifdef TOOLS_MEM 30 #ifdef TOOLS_MEM 31 mem::increment("cmem"); 31 mem::increment("cmem"); 32 #endif 32 #endif 33 return p; 33 return p; 34 } 34 } 35 35 36 template <class T> 36 template <class T> 37 inline T* cmem_alloc_copy(const T* a_from,size 37 inline T* cmem_alloc_copy(const T* a_from,size_t a_num){ 38 if(a_num<=0) return 0; 38 if(a_num<=0) return 0; 39 T* p = (T*)::malloc(a_num*sizeof(T)); 39 T* p = (T*)::malloc(a_num*sizeof(T)); 40 if(!p) return 0; 40 if(!p) return 0; 41 #ifdef TOOLS_MEM 41 #ifdef TOOLS_MEM 42 mem::increment("cmem"); 42 mem::increment("cmem"); 43 #endif 43 #endif 44 //::memcpy(p,a_from,a_num*sizeof(T)); 44 //::memcpy(p,a_from,a_num*sizeof(T)); 45 for(size_t i=0;i<a_num;i++) p[i] = a_from[i] 45 for(size_t i=0;i<a_num;i++) p[i] = a_from[i]; 46 return p; 46 return p; 47 } 47 } 48 48 49 } 49 } 50 50 51 #endif 51 #endif