2 #ifndef comfrm_MemoryManagementH
3 #define comfrm_MemoryManagementH
58 #define MAC_MEMRELEASE(A) {if (A!=NULL) delete A; A = NULL;}
64 #define MAC_ARRRELEASE(A) {if (A!=NULL) delete[] A; A = NULL;}
66 #define MEM_NULL_INIT_VALUE 111
67 #define MEM_NULL_INIT_ARRAY 112
85 template<
class DataType>
89 void operator()(DataType* p_data)
104 for (
typename std::list< T* >::iterator p = o_list->begin(); p != o_list->end(); ++p)
119 o_list =
new std::list< T >();
130 com::mem::tmp_ReleaseList<T>(v_list);
131 v_list =
new std::list< T* >();
163 typedef typename std::list< T* >::iterator LIT;
166 for (LIT p = o_dest.begin(); p != o_dest.end(); ++p)
172 for (LIT p = p_source.begin(); p != p_source.end(); ++p)
174 T* tmp =
new T(*(*p));
175 o_dest.push_back((*p));
187 template<
typename DataType>
188 void copyTwoDimArray(DataType** o_res, DataType**
const p_orig,
int p_rows,
int p_cols)
190 for (
int iCount = 0; iCount < p_rows; iCount++){
191 for (
int jCount = 0; jCount < p_cols; jCount++){
192 o_res[iCount][jCount] = p_orig[iCount][jCount];
212 o_array =
new T[p_dim];
228 if (p_init_value != NULL)
229 for (T* it = o_array; it != o_array + p_dim; it++)
233 for (T* it = o_array; it != o_array + p_dim; it++)
236 res = MEM_NULL_INIT_VALUE;
240 if (p_init_value!=NULL)
241 for (T *it = o_array, *src = p_init_value; it != o_array + p_dim; ++it, ++src)
244 res = MEM_NULL_INIT_ARRAY;
251 if (res == MEM_NULL_INIT_VALUE || res == MEM_NULL_INIT_ARRAY)
252 for (T *it = o_array;it != o_array + p_dim; ++it)
269 T temp = p_init_value;
270 return tmp_reinitOneDimArray<T>(out, p_createNew, p_dim,
mdaValue, &temp);
287 o_array =
new T*[p_rows];
290 if (p_init_value != NULL && p_init_type ==
mdaArray)
291 for (T **it = o_array, **src = p_init_value; it != o_array + p_rows; ++it, ++src)
292 tmp_reinitOneDimArray< T >(*it, p_create_new, p_cols, p_init_type, *src);
293 else if (p_init_value == NULL && p_init_type ==
mdaValue)
294 for (T **it = o_array; it != o_array + p_rows; ++it)
295 tmp_reinitOneDimArray< T >(*it, p_create_new, p_cols, p_init_type, NULL);
296 else if (p_init_value != NULL && p_init_type ==
mdaValue)
297 for (T **it = o_array; it != o_array + p_rows; ++it)
298 tmp_reinitOneDimArray< T >(*it, p_create_new, p_cols, **p_init_value);
300 for (T **it = o_array; it != o_array + p_rows; ++it)
301 tmp_reinitOneDimArray< T >(*it, p_create_new, p_cols, p_init_type, NULL);
303 for (
int i=0; i < p_rows; ++i)
304 for (
int j=0; j < p_cols; ++j)
305 o_array[i][j] = (i==j)?T(1):T(0);
321 T temp = p_init_value;
324 return tmp_reinitTwoDimArray< T >(p_out, p_createNew, p_rows, p_cols,
mdaValue, pptr);
339 tmp_reinitOneDimArray<T>(out,
true, p_dim, p_init_type, p_init_array);
374 o_array =
new T**[p_dim1];
376 if (p_init_value != NULL && p_init_type ==
mdaArray)
377 for (T ***it = o_array, ***src = p_init_value; it != o_array + p_dim1; ++it, ++src)
378 tmp_reinitTwoDimArray< T >(*it, p_create_new, p_dim2, p_dim3, p_init_type, *src);
379 else if (p_init_value == NULL && p_init_type ==
mdaValue)
380 for (T ***it = o_array; it != o_array + p_dim1; ++it)
381 tmp_reinitTwoDimArray< T >(*it, p_create_new, p_dim2, p_dim3, p_init_type, NULL);
382 else if (p_init_value != NULL && p_init_type ==
mdaValue)
383 for (T ***it = o_array; it != o_array + p_dim1; ++it)
384 tmp_reinitTwoDimArray< T >(*it, p_create_new, p_dim2, p_dim3, ***p_init_value);
386 for (T ***it = o_array; it != o_array + p_dim1; ++it)
387 tmp_reinitTwoDimArray< T >(*it, p_create_new, p_dim2, p_dim3, p_init_type, NULL);
391 for (
int i = 0; i < p_dim1; ++i)
392 for (
int j = 0; j < p_dim2; ++j)
393 for (
int k = 0; k < p_dim3; ++k)
394 o_array[i][j][k] = (i==j && j==k)?T(1):T(0);
413 T temp = p_init_value;
417 return tmp_reinitThreeDimArray< T >(o_out, p_create_new, p_dim1, p_dim2, p_dim3,
mdaValue, ppptr);
464 T temp = p_init_value;
465 tmp_reinitOneDimArray<T>(out,
true, p_dim,
mdaValue, &temp);
480 T temp = p_init_value;
481 tmp_reinitTwoDimArray<T>(out,
true, p_rows, p_cols, temp);
495 for (
int i = 0; i < p_rows; ++i)
513 for (
int i = 0; i < p_dim1; ++i)
515 for (
int j = 0 ; j < p_dim2; ++j)
529 template<
typename DATATYPE>
537 ,m_data(createOneDimArray<DATATYPE>(m_dim1))
555 template<
typename DATATYPE>
562 ,m_data(createTwoDimArray<DATATYPE>(m_dim1,m_dim2))
567 freeTwoDimArray<DATATYPE>(m_data,m_dim1);
Класс одномерного массива
Definition: memorytools.h:530
enu_MultiDimArrayType
Набор параметров, определяющих как нужно инициализировать многомерный массив.
Definition: memorytools.h:74
#define MAC_ARRRELEASE(A)
Definition: memorytools.h:64
Массив не следует инициализировать
Definition: memorytools.h:75
void tmp_ReInitList(std::list< T > *&o_list)
Definition: memorytools.h:116
где N - размерность массива, а i1,i2,...,iN - индексы элементов по каждой размерности ...
Definition: memorytools.h:77
Функциональный класс для освобождения памяти
Definition: memorytools.h:86
void copyTwoDimArray(DataType **o_res, DataType **const p_orig, int p_rows, int p_cols)
Definition: memorytools.h:188
int tmp_reinitOneDimArray(T *&o_array, bool p_createNew, int p_dim, enu_MultiDimArrayType p_init_type, T *p_init_value)
Definition: memorytools.h:207
void tmp_ReleaseTree(tree< T * > *&o_tree)
Definition: memorytools.h:140
void tmp_CopyList(std::list< T * > &o_dest, std::list< T * > &p_source)
Definition: memorytools.h:161
pre_order_iterator begin() const
Return iterator to the beginning of the tree.
Definition: tree.h:613
#define MAC_MEMRELEASE(A)
Definition: memorytools.h:58
T ** createTwoDimArray(int p_rows, int p_cols, enu_MultiDimArrayType p_init_type, T **p_init_value=NULL)
Definition: memorytools.h:352
Класс двухмерного массива
Definition: memorytools.h:556
bool is_valid(const iterator_base &) const
Determine whether the iterator is an 'end' iterator and thus not actually pointing to a node...
Definition: tree.h:1818
Depth-first iterator, first accessing the children, then the node itself.
Definition: tree.h:144
Массив следует инициализировать одним заданным значением
Definition: memorytools.h:76
void tmp_ReInitPtrList(std::list< T * > *&v_list)
Definition: memorytools.h:128
void freeTwoDimArray(T **&o_ptr, int p_rows)
Definition: memorytools.h:491
Массив следует инициализировать данными из другого массива (аналог копирующего конструктора для класс...
Definition: memorytools.h:79
void freeThreeDimArray(T ***o_ptr, int p_dim1, int p_dim2)
Definition: memorytools.h:509
T *** createThreeDimArray(int p_dim1, int p_dim2, int p_dim3, const T &p_init_value=T(0))
Definition: memorytools.h:429
int tmp_reinitTwoDimArray(T **&o_array, bool p_create_new, int p_rows, int p_cols, enu_MultiDimArrayType p_init_type, T **p_init_value)
Definition: memorytools.h:284
void tmp_ReleaseList(std::list< T * > *&o_list)
Definition: memorytools.h:100
T * createOneDimArray(int p_dim, enu_MultiDimArrayType p_init_type, T *p_init_array=NULL)
Definition: memorytools.h:336
int tmp_reinitThreeDimArray(T ***&o_array, bool p_create_new, int p_dim1, int p_dim2, int p_dim3, enu_MultiDimArrayType p_init_type, T ***p_init_value)
Definition: memorytools.h:371