/*
 **    Name: rmamem.h
 **
 **    Date: Sun Jan  5 16:29:04 2003
 **
 */

#ifndef _RMAMEM_H
#define _RMAMEM_H

#include <stdlib.h>

/* #include "MemCheck:MemCheck.h" */

extern int rmamem_status;
extern int rmamem_limit;
extern int rmamem_size;

extern char rmamem_name[];

typedef struct _RMAMemDetails
{
    int count;
    int da;
    int base;
    int add;
    int heap_size;
} RMAMemDetails;

extern RMAMemDetails rmamem_details;

/* Status values */

#define RMAMEM_UNITIALISED 0
#define RMAMEM_DYNAMICAREA 1
#define RMAMEM_MALLOC      2
#define RMAMEM_RMA         3

#ifdef __cplusplus
extern "C"
{
#endif

/* Allocation */

    char *rmacalloc(size_t /*nmemb*/, size_t /*size*/);
    void rmafree(void * /*ptr*/);
    char *rmamalloc(size_t /*size*/);
    char *rmarealloc(void * /*ptr*/, size_t /*size*/);

    char *rmadebugcalloc(int line,char *file,size_t /*nmemb*/, size_t /*size*/);
    void rmadebugfree(int line,char *file,void * /*ptr*/);
    char *rmadebugmalloc(int line,char *file,size_t /*size*/);
    char *rmadebugrealloc(int line,char *file,void * /*ptr*/, size_t /*size*/);

/* Initialisation */

    void rmamem_init(int);

/* Tidy up */

    void rmamem_tidy(void);

/* Grow allocated area */

    int rmamem_grow(int);

/* Shrink allocated area */

    void rmamem_shrink(void);

/* Rink sugar functions */

    void rinkfree(void * /*ptr*/);
    char *rinkmalloc(size_t /*size*/);

#ifdef __cplusplus
}
#endif
#endif
