// Copyright (C) 2010, Guy Barrand. All rights reserved. // See the file tools.license for terms. #ifndef tools_cmemT #define tools_cmemT #include #include //memcpy namespace tools { template inline void cmem_free(T*& a_p){ if(!a_p) return; ::free(a_p); a_p = NULL; } template inline T* cmem_alloc(size_t a_num){ if(a_num<=0) return 0; T* p = (T*)::malloc(a_num*sizeof(T)); if(!p) return 0; return p; } template inline bool cmem_realloc(T*& a_pointer,size_t a_new_size,size_t a_old_size,bool a_init = false) { if(!a_new_size) { delete [] a_pointer; a_pointer = 0; return true; } if(!a_pointer) { a_pointer = new T[a_new_size]; if(!a_pointer) return false; return true; } if(a_old_size==a_new_size) return true; T* pointer = new T[a_new_size]; if(!pointer) { delete [] a_pointer; a_pointer = 0; return false; } if(a_new_size>a_old_size) { ::memcpy(pointer,a_pointer,a_old_size*sizeof(T)); if(a_init){ size_t num = a_new_size-a_old_size; T* pos = pointer+a_old_size; for(size_t i=0;i