| /* |
| * Copyright (C) Tildeslash Ltd. All rights reserved. |
| * |
| * This program is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU Affero General Public License version 3. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Affero General Public License for more details. |
| * |
| * You should have received a copy of the GNU Affero General Public License |
| * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| * |
| * In addition, as a special exception, the copyright holders give |
| * permission to link the code of portions of this program with the |
| * OpenSSL library under certain conditions as described in each |
| * individual source file, and distribute linked combinations |
| * including the two. |
| * |
| * You must obey the GNU Affero General Public License in all respects |
| * for all of the code used other than OpenSSL. |
| */ |
| |
| |
| #ifndef MEM_INCLUDED |
| #define MEM_INCLUDED |
| |
| |
| /** |
| * General purpose <b>memory allocation</b> methods. |
| * |
| * @see http://www.mmonit.com/ |
| * @file |
| */ |
| |
| |
| /** |
| * Allocate <code>n</code> bytes. |
| * @param n number of bytes to allocate |
| * @return A pointer to the newly allocated memory |
| * @exception MemoryException if allocation failed |
| * @exception AssertException if <code>n <= 0</code> |
| * @see AssertException.h, MemoryException.h |
| * @hideinitializer |
| */ |
| #define ALLOC(n) Mem_alloc((n), __func__, __FILE__, __LINE__) |
| |
| |
| /** |
| * Allocate <code>c</code> objects of size <code>n</code> each. |
| * Same as calling ALLOC(c * n) except this function also clear |
| * the memory region before it is returned. |
| * @param c number of objects to allocate |
| * @param n object size in bytes |
| * @return A pointer to the newly allocated memory |
| * @exception MemoryException if allocation failed |
| * @exception AssertException if <code>c or n <= 0</code> |
| * @see AssertException.h, MemoryException.h |
| * @hideinitializer |
| */ |
| #define CALLOC(c, n) Mem_calloc((c), (n), __func__, __FILE__, __LINE__) |
| |
| |
| /** |
| * Allocate object <code>p</code> and clear the memory region |
| * before the allocated object is returned. |
| * @param p Object to allocate |
| * @exception MemoryException if allocation failed |
| * @see AssertException.h, MemoryException.h |
| * @hideinitializer |
| */ |
| #define NEW(p) ((p) = CALLOC(1, (long)sizeof *(p))) |
| |
| |
| /** |
| * Deallocates <code>p</code> |
| * @param p Object to deallocate |
| * @hideinitializer |
| */ |
| #define FREE(p) ((void)(Mem_free((p), __func__, __FILE__, __LINE__), (p) = 0)) |
| |
| |
| /** |
| * Reallocate <code>p</code> with size <code>n</code>. |
| * @param p pointer to reallocate |
| * @param n new object size in bytes |
| * @exception MemoryException if allocation failed |
| * @exception AssertException if <code>n <= 0</code> |
| * @see AssertException.h, MemoryException.h |
| * @hideinitializer |
| */ |
| #define RESIZE(p, n) ((p) = Mem_resize((p), (n), __func__, __FILE__, __LINE__)) |
| |
| |
| /** |
| * Allocate and return <code>size</code> bytes of memory. If |
| * allocation failed this throws a MemoryException |
| * @param size The number of bytes to allocate |
| * @param func the callee |
| * @param file location of caller |
| * @param line location of caller |
| * @return a pointer to the allocated memory |
| * @exception MemoryException if allocation failed |
| * @exception AssertException if <code>n <= 0</code> |
| * @see AssertException.h, MemoryException.h |
| */ |
| void *Mem_alloc(long size, const char *func, const char *file, int line); |
| |
| |
| /** |
| * Allocate and return memory for <code>count</code> objects, each of |
| * <code>size</code> bytes. The returned memory is cleared. If allocation |
| * failed this method throws a MemoryException |
| * @param count The number of objects to allocate |
| * @param size The size of each object to allocate |
| * @param func the callee |
| * @param file location of caller |
| * @param line location of caller |
| * @return a pointer to the allocated memory |
| * @exception MemoryException if allocation failed |
| * @exception AssertException if <code>c or n <= 0</code> |
| * @see AssertException.h, MemoryException.h |
| */ |
| void *Mem_calloc(long count, long size, const char *func, const char *file, int line); |
| |
| |
| /** |
| * Deallocate the memory pointed to by <code>p</code> |
| * @param p The memory to deallocate |
| * @param func the callee |
| * @param file location of caller |
| * @param line location of caller |
| */ |
| void Mem_free(void *p, const char *func, const char *file, int line); |
| |
| |
| /** |
| * Resize the allocation pointed to by <code>p</code> by <code>size</code> |
| * bytes and return the changed allocation. If allocation failed this |
| * method throws a MemoryException |
| * @param p A pointer to the allocation to change |
| * @param size The new size of <code>p</code> |
| * @param func the callee |
| * @param file location of caller |
| * @param line location of caller |
| * @return a pointer to the changed memory |
| * @exception MemoryException if allocation failed |
| * @exception AssertException if <code>n <= 0</code> |
| * @see AssertException.h, MemoryException.h |
| */ |
| void *Mem_resize(void *p, long size, const char *func, const char *file, int line); |
| |
| |
| #endif |