Skip to content
Snippets Groups Projects
shmem.h 1.43 KiB
Newer Older
teuben's avatar
teuben committed
#ifndef _SHMEM_H
#define _SHMEM_H

#ifdef __cplusplus
extern "C" {
#endif

#if CAVEMENU
# define CAVE 1
#endif

#if CAVE
	/* Shared memory definitions */

#include <malloc.h>	/* for amalloc() */

#define NewN(type, count)     (type *)shmalloc((count) * sizeof(type))
#define RenewN(p,type,count)  (type *)shmrealloc(p, (count) * sizeof(type))
#define Free(p)		      shmfree( p )

extern void *aarena;
extern void shminit( int bytes );
extern void shmusearena( void *arena );

extern void *shmalloc(int nbytes);
extern void  shmfree(void *ptr);
extern void *shmrealloc(void *ptr, int nbytes);
extern char *shmstrdup(char *str);

	/* If we run out of memory, ask (*func)(data, nbytes, arena)
	 * to free some.
	 * func should return 1 if it freed something (i.e. if it's
	 *   worth retrying the allocation), 0 if no improvement.
	 * We should really have a list of these functions,
	 * for multiple separately-written clients of our shmem pool.
	 */
extern void shmrecycler( int (*func)(void *, int, void *), void *data );

#else /* non-CAVE */

#define NewN(type, count)	((type *)malloc((count) * sizeof(type)))
#define RenewN(p,type,count)	((type *)realloc(p, (count) * sizeof(type)))
#define Free(p)			free( p )

#define	shmstrdup(str)		strdup(str)
#endif /*!CAVEMENU*/


#define OOGLNewNE(type, count, str)    NewN(type, count)
#define OOGLReNewNE(p,type,count,str)  RenewN(p,type,count)
#define OOGLFree(p)		       Free(p)


#ifdef __cplusplus
}
#endif
#endif