/** * @file memory.h * * Memory allocation wrappers. * * @author Geoff Davis <geoff@circlemudsquared.org> * @ingroup common * @license All rights reserved. See license.doc for complete information. * @package cs * @since v1.0 * * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. */ #ifndef __MEMORY_H__ #define __MEMORY_H__ /** * Allocates enough memory for an array of the specified type consisting of * the specified number of elements. * @param typeName the name of the type of each element * @param elemCount the number of elements to be allocated * @return a pointer to the allocated memory, or NULL */ #define CIRCLE_ALLOCN(typeName, elemCount) \ ((sizeof(typeName) * (elemCount)) > 0 ? \ ((typeName*) calloc((elemCount), sizeof(typeName))) : (typeName*) 0) /** * Copies array elements (instead of bytes) from one place to another. * @param dest the location to which elements are to be written * @param src the location from which elements are to be read * @param typeName the name of the type of each element * @param elemCount the number of elements to be copied * @return none */ #define CIRCLE_COPYN(dest, src, typeName, elemCount) \ do { \ if ((dest) && (src) && (dest) != (src) && \ ((elemCount) * sizeof(typeName)) > 0) { \ memmove((dest), (src), sizeof(typeName) * (elemCount)); \ } \ } while (0) /** * Frees the specified pointer. * @param p the pointer to the heap-allocated block to be freed * @return none */ #define CIRCLE_FREE(p) \ do { \ if ((p)) { \ free(p); \ (p) = NULL; \ } \ } while (0) #endif /* __MEMORY_H__ */