#ifndef _VMALLOC_H
#define _VMALLOC_H 1
#define VMALLOC_VERSION 19990805L
#if _PACKAGE_ast
#include <ast_std.h>
#else
#include <ast_common.h>
#endif
typedef struct _vmalloc_s Vmalloc_t;
typedef struct _vmstat_s Vmstat_t;
typedef struct _vmdisc_s Vmdisc_t;
typedef struct _vmethod_s Vmethod_t;
typedef Void_t* (*Vmemory_f)_ARG_((Vmalloc_t*, Void_t*, size_t, size_t, Vmdisc_t*));
typedef int (*Vmexcept_f)_ARG_((Vmalloc_t*, int, Void_t*, Vmdisc_t*));
struct _vmstat_s
{ int n_busy;
int n_free;
size_t s_busy;
size_t s_free;
size_t m_busy;
size_t m_free;
int n_seg;
size_t extent;
};
struct _vmdisc_s
{ Vmemory_f memoryf;
Vmexcept_f exceptf;
size_t round;
};
struct _vmethod_s
{ Void_t* (*allocf)_ARG_((Vmalloc_t*,size_t));
Void_t* (*resizef)_ARG_((Vmalloc_t*,Void_t*,size_t,int));
int (*freef)_ARG_((Vmalloc_t*,Void_t*));
long (*addrf)_ARG_((Vmalloc_t*,Void_t*));
long (*sizef)_ARG_((Vmalloc_t*,Void_t*));
int (*compactf)_ARG_((Vmalloc_t*));
Void_t* (*alignf)_ARG_((Vmalloc_t*,size_t,size_t));
unsigned short meth;
};
struct _vmalloc_s
{ Vmethod_t meth;
char* file;
int line;
#ifdef _VM_PRIVATE_
_VM_PRIVATE_
#endif
};
#define VM_TRUST 0000001
#define VM_TRACE 0000002
#define VM_DBCHECK 0000004
#define VM_DBABORT 0000010
#define VM_FLAGS 0000017
#define VM_MTBEST 0000100
#define VM_MTPOOL 0000200
#define VM_MTLAST 0000400
#define VM_MTDEBUG 0001000
#define VM_MTPROFILE 0002000
#define VM_METHODS 0003700
#define VM_RSCOPY 0000001
#define VM_RSMOVE 0000002
#define VM_RSZERO 0000004
#define VM_OPEN 0
#define VM_CLOSE 1
#define VM_NOMEM 2
#define VM_BADADDR 3
#define VM_DISC 4
_BEGIN_EXTERNS_
#if _BLD_vmalloc && defined(__EXPORT__)
#define extern __EXPORT__
#endif
#if !_BLD_vmalloc && defined(__IMPORT__)
#define extern __IMPORT__
#endif
extern Vmethod_t* Vmbest;
extern Vmethod_t* Vmlast;
extern Vmethod_t* Vmpool;
extern Vmethod_t* Vmdebug;
extern Vmethod_t* Vmprofile;
extern Vmdisc_t* Vmdcheap;
extern Vmdisc_t* Vmdcsbrk;
extern Vmalloc_t* Vmheap;
extern Vmalloc_t* Vmregion;
#undef extern
_END_EXTERNS_
_BEGIN_EXTERNS_
#if _BLD_vmalloc && defined(__EXPORT__)
#define extern __EXPORT__
#endif
extern Vmalloc_t* vmopen _ARG_(( Vmdisc_t*, Vmethod_t*, int ));
extern int vmclose _ARG_(( Vmalloc_t* ));
extern int vmclear _ARG_(( Vmalloc_t* ));
extern int vmcompact _ARG_(( Vmalloc_t* ));
extern Vmdisc_t* vmdisc _ARG_(( Vmalloc_t*, Vmdisc_t* ));
extern Void_t* vmalloc _ARG_(( Vmalloc_t*, size_t ));
extern Void_t* vmalign _ARG_(( Vmalloc_t*, size_t, size_t ));
extern Void_t* vmresize _ARG_(( Vmalloc_t*, Void_t*, size_t, int ));
extern int vmfree _ARG_(( Vmalloc_t*, Void_t* ));
extern long vmaddr _ARG_(( Vmalloc_t*, Void_t* ));
extern long vmsize _ARG_(( Vmalloc_t*, Void_t* ));
extern Vmalloc_t* vmregion _ARG_(( Void_t* ));
extern Void_t* vmsegment _ARG_(( Vmalloc_t*, Void_t* ));
extern int vmset _ARG_(( Vmalloc_t*, int, int ));
extern Void_t* vmdbwatch _ARG_(( Void_t* ));
extern int vmdbcheck _ARG_(( Vmalloc_t* ));
extern int vmprofile _ARG_(( Vmalloc_t*, int ));
extern int vmtrace _ARG_(( int ));
extern int vmtrbusy _ARG_((Vmalloc_t*));
extern int vmstat _ARG_((Vmalloc_t*, Vmstat_t*));
extern int vmwalk _ARG_((Vmalloc_t*,
int(*)(Vmalloc_t*,Void_t*,size_t,Vmdisc_t*)));
extern char* vmstrdup _ARG_((Vmalloc_t*, const char*));
#if !defined(_AST_STD_H) && \
!defined(__stdlib_h) && !defined(__STDLIB_H) && !defined(_hdr_stdlib) && \
!defined(_STDLIB_INCLUDED) && !defined(_INC_STDLIB)
extern Void_t* malloc _ARG_(( size_t ));
extern Void_t* realloc _ARG_(( Void_t*, size_t ));
extern void free _ARG_(( Void_t* ));
extern void cfree _ARG_(( Void_t* ));
extern Void_t* calloc _ARG_(( size_t, size_t ));
extern Void_t* memalign _ARG_(( size_t, size_t ));
extern Void_t* valloc _ARG_(( size_t ));
#endif
#undef extern
_END_EXTERNS_
#define _VM_(vm) ((Vmalloc_t*)(vm))
#if defined(VMFL) && defined(__FILE__) && defined(__LINE__)
#define _VMFL_(vm) (_VM_(vm)->file = __FILE__, _VM_(vm)->line = __LINE__)
#define vmalloc(vm,sz) (_VMFL_(vm), \
(*(_VM_(vm)->meth.allocf))((vm),(sz)) )
#define vmresize(vm,d,sz,type) (_VMFL_(vm), \
(*(_VM_(vm)->meth.resizef))\
((vm),(Void_t*)(d),(sz),(type)) )
#define vmfree(vm,d) (_VMFL_(vm), \
(*(_VM_(vm)->meth.freef))((vm),(Void_t*)(d)) )
#define vmalign(vm,sz,align) (_VMFL_(vm), \
(*(_VM_(vm)->meth.alignf))((vm),(sz),(align)) )
#if __STD_C || defined(__STDPP__) || defined(__GNUC__)
#define malloc(s) (_VMFL_(Vmregion), malloc((size_t)(s)) )
#define realloc(d,s) (_VMFL_(Vmregion), realloc((Void_t*)(d),(size_t)(s)) )
#define calloc(n,s) (_VMFL_(Vmregion), calloc((size_t)n, (size_t)(s)) )
#define free(d) (_VMFL_(Vmregion), free((Void_t*)(d)) )
#define memalign(a,s) (_VMFL_(Vmregion), memalign((size_t)(a),(size_t)(s)) )
#define valloc(s) (_VMFL_(Vmregion), valloc((size_t)(s) )
#else
#define _VMNM_(a,b,c,d,e,f) abcdef
#define malloc(s) (_VMFL_(Vmregion), _VMNM_(mallo,/,*,*,/,c)\
((size_t)(s)) )
#define realloc(d,s) (_VMFL_(Vmregion), _VMNM_(reallo,/,*,*,/,c)\
((Void_t*)(d),(size_t)(s)) )
#define calloc(n,s) (_VMFL_(Vmregion), _VMNM_(callo,/,*,*,/,c)\
((size_t)n, (size_t)(s)) )
#define free(d) (_VMFL_(Vmregion), _VMNM_(fre,/,*,*,/,e)((Void_t*)(d)) )
#define memalign(a,s) (_VMFL_(Vmregion), _VMNM_(memalig,/,*,*,/,n)\
((size_t)(a),(size_t)(s)) )
#define valloc(s) (_VMFL_(Vmregion), _VMNM_(vallo,/,*,*,/,c)\
((size_t)(s) )
#endif
#define cfree(d) free(d)
#endif
#ifndef vmalloc
#define vmalloc(vm,sz) (*(_VM_(vm)->meth.allocf))((vm),(sz))
#endif
#ifndef vmresize
#define vmresize(vm,d,sz,type) (*(_VM_(vm)->meth.resizef))\
((vm),(Void_t*)(d),(sz),(type))
#endif
#ifndef vmfree
#define vmfree(vm,d) (*(_VM_(vm)->meth.freef))((vm),(Void_t*)(d))
#endif
#ifndef vmalign
#define vmalign(vm,sz,align) (*(_VM_(vm)->meth.alignf))((vm),(sz),(align))
#endif
#define vmaddr(vm,addr) (*(_VM_(vm)->meth.addrf))((vm),(Void_t*)(addr))
#define vmsize(vm,addr) (*(_VM_(vm)->meth.sizef))((vm),(Void_t*)(addr))
#define vmcompact(vm) (*(_VM_(vm)->meth.compactf))((vm))
#define vmoldof(v,p,t,n,x) (t*)vmresize((v), (p), sizeof(t)*(n)+(x), \
(VM_RSMOVE) )
#define vmnewof(v,p,t,n,x) (t*)vmresize((v), (p), sizeof(t)*(n)+(x), \
(VM_RSMOVE|VM_RSCOPY|VM_RSZERO) )
#endif