/* ****************************************************************** * $Id: gc.h 254 2002-09-13 14:31:38Z clerger $ * Copyright (C) 2002 by INRIA * Author: Eric de la Clergerie <Eric.De_La_Clergerie@inria.fr> * ---------------------------------------------------------------- * * gc.h -- Boehm gc minimal API * * ---------------------------------------------------------------- * Description * we extract from Boem Garbage Collector a minimal gc.h forour need * (the standard distribution of GC install a library but not .h) * See below Copyright info * ---------------------------------------------------------------- */ #ifndef _GC_H # define _GC_H #ifndef GC_API #define GC_API extern #endif typedef unsigned long GC_word; typedef long GC_signed_word; # if defined(__STDC__) || defined(__cplusplus) # define GC_PROTO(args) args typedef void * GC_PTR; # define GC_CONST const # else # define GC_PROTO(args) () typedef char * GC_PTR; # define GC_CONST # endif # define GC_EXTRAS GC_RETURN_ADDR, __FILE__, __LINE__ # define GC_EXTRA_PARAMS GC_CONST char * s, int i GC_API GC_PTR GC_malloc GC_PROTO((size_t size_in_bytes)); GC_API GC_PTR GC_malloc_atomic GC_PROTO((size_t size_in_bytes)); GC_API GC_PTR GC_malloc_uncollectable GC_PROTO((size_t size_in_bytes)); GC_API GC_PTR GC_malloc_stubborn GC_PROTO((size_t size_in_bytes)); GC_API GC_PTR GC_debug_malloc GC_PROTO((size_t size_in_bytes, GC_EXTRA_PARAMS)); GC_API GC_PTR GC_debug_malloc_atomic GC_PROTO((size_t size_in_bytes, GC_EXTRA_PARAMS)); GC_API GC_PTR GC_debug_malloc_uncollectable GC_PROTO((size_t size_in_bytes, GC_EXTRA_PARAMS)); GC_API GC_PTR GC_debug_malloc_stubborn GC_PROTO((size_t size_in_bytes, GC_EXTRA_PARAMS)); GC_API void GC_debug_free GC_PROTO((GC_PTR object_addr)); GC_API GC_PTR GC_debug_realloc GC_PROTO((GC_PTR old_object, size_t new_size_in_bytes, GC_EXTRA_PARAMS)); GC_API void GC_register_displacement GC_PROTO((GC_word n)); GC_API void GC_debug_register_displacement GC_PROTO((GC_word n)); GC_API int GC_expand_hp GC_PROTO((size_t number_of_bytes)); GC_API int GC_register_disappearing_link GC_PROTO((GC_PTR * /* link */)); GC_API int GC_general_register_disappearing_link GC_PROTO((GC_PTR * /* link */, GC_PTR obj)); GC_API int GC_collect_a_little GC_PROTO((void)); # ifdef GC_DEBUG # define GC_MALLOC(sz) GC_debug_malloc(sz, GC_EXTRAS) # define GC_MALLOC_ATOMIC(sz) GC_debug_malloc_atomic(sz, GC_EXTRAS) # define GC_MALLOC_UNCOLLECTABLE(sz) GC_debug_malloc_uncollectable(sz, \ GC_EXTRAS) # define GC_REALLOC(old, sz) GC_debug_realloc(old, sz, GC_EXTRAS) # define GC_FREE(p) GC_debug_free(p) # define GC_REGISTER_FINALIZER(p, f, d, of, od) \ GC_debug_register_finalizer(p, f, d, of, od) # define GC_REGISTER_FINALIZER_IGNORE_SELF(p, f, d, of, od) \ GC_debug_register_finalizer_ignore_self(p, f, d, of, od) # define GC_REGISTER_FINALIZER_NO_ORDER(p, f, d, of, od) \ GC_debug_register_finalizer_no_order(p, f, d, of, od) # define GC_MALLOC_STUBBORN(sz) GC_debug_malloc_stubborn(sz, GC_EXTRAS); # define GC_CHANGE_STUBBORN(p) GC_debug_change_stubborn(p) # define GC_END_STUBBORN_CHANGE(p) GC_debug_end_stubborn_change(p) # define GC_GENERAL_REGISTER_DISAPPEARING_LINK(link, obj) \ GC_general_register_disappearing_link(link, GC_base(obj)) # define GC_REGISTER_DISPLACEMENT(n) GC_debug_register_displacement(n) # else # define GC_MALLOC(sz) GC_malloc(sz) # define GC_MALLOC_ATOMIC(sz) GC_malloc_atomic(sz) # define GC_MALLOC_UNCOLLECTABLE(sz) GC_malloc_uncollectable(sz) # define GC_REALLOC(old, sz) GC_realloc(old, sz) # define GC_FREE(p) GC_free(p) # define GC_REGISTER_FINALIZER(p, f, d, of, od) \ GC_register_finalizer(p, f, d, of, od) # define GC_REGISTER_FINALIZER_IGNORE_SELF(p, f, d, of, od) \ GC_register_finalizer_ignore_self(p, f, d, of, od) # define GC_REGISTER_FINALIZER_NO_ORDER(p, f, d, of, od) \ GC_register_finalizer_no_order(p, f, d, of, od) # define GC_MALLOC_STUBBORN(sz) GC_malloc_stubborn(sz) # define GC_CHANGE_STUBBORN(p) GC_change_stubborn(p) # define GC_END_STUBBORN_CHANGE(p) GC_end_stubborn_change(p) # define GC_GENERAL_REGISTER_DISAPPEARING_LINK(link, obj) \ GC_general_register_disappearing_link(link, obj) # define GC_REGISTER_DISPLACEMENT(n) GC_register_displacement(n) # endif #endif /* _GC_H */