/* drwalloc User Interface Functions. */

#ifndef drwallocIfn_H
 #define drwallocIfn_H

#ifdef __cplusplus 
extern "C" {
#endif

extern byte *drw_mem_realloc(void *ptr,
                             drwGP_ptr anchor,
                             size_t newsize,
                             drw_mem_flags mf,
                             int extraspace,
                             int nocopy,
                             byte **heap,
                             size_t at);

extern drwGP drw_alloc(drwGP Pallocptr,
                       drwGP_ptr anchor,
                       size_t allocsize,
                       drw_mem_flags mf,
                       byte **darea,
                       char *alloctitle,
                       size_t allocnum,
                       int extraspace,
                       int nocopy,
                       size_t at);

extern void drw_dealloc(drwGP Pptr,
                        byte **darea);

extern void drw_mem_alloc_new_heap(byte *darea,
                                   int blocksize);

extern byte *drw_mem_alloc(size_t size,
                           drw_mem_flags memtype,
                           drwGP_ptr anchor,
                           byte **heap);

extern byte *drw_alloc_mem(byte *mem,
                           size_t size,
                           drw_mem_flags mfflags,
                           drwGP_ptr anchor,
                           byte **heap);

extern byte *drw_extend_da(byte *darea,
                           int absolute,
                           int size);

extern int drw_wimp_measuredynamic(byte *darea);

extern void drw_mem_free(void *ptr, byte **darea);

extern void *drw_append_new_data_ll(drwGP Phdr,
                                    drwGP Punusedhdr,
                                    size_t datasize,
                                    int data_is_resizeable,
                                    drw_data_init_fn dinitfn);

extern int drw_alloc_buff(int buffsizein,
                          drw_mem_flags mf,
                          byte **darea,
                          drwGP_ptr anchor,
                          int *buffsizeout,
                          int *buffallocated,
                          int extraspace,
                          int nocopy);

#ifdef __cplusplus
}
#endif

#endif

