home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / sofa / archive / SmallEiffel.lha / SmallEiffel / sys / runtime / gc_lib.h < prev    next >
C/C++ Source or Header  |  1999-06-05  |  3KB  |  122 lines

  1. /*
  2. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  3. -- software  is  distributed  in the hope that it will be useful, but WITHOUT 
  4. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  5. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  6. -- this header is kept unaltered, and a notification of the changes is added.
  7. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
  8. -- another product.
  9. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  10. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  11. --                       http://www.loria.fr/SmallEiffel
  12. --
  13. */
  14. /* This file is automatically included when the Garbage Collector
  15.    is used (default, unless option -no_gc has been selected).
  16. */
  17. #define SE_GC_LIB 1
  18.  
  19. #define RSOH_UNMARKED 15253     
  20. #define RSOH_MARKED 0
  21. #define RSOH_FREE 1
  22.  
  23.  
  24. #define FSOH_UNMARKED 1
  25. #define FSOH_MARKED 0
  26.  
  27. /* To codify the state and the type of some Memory Chunk, we are 
  28.    using the following definitions :
  29. */
  30. #define FSO_FREE_CHUNK  (-2)
  31. #define RSO_FREE_CHUNK  (-1)
  32. #define RSO_USED_CHUNK  ( 0)
  33. #define FSO_STORE_CHUNK ( 1)
  34. #define FSO_USED_CHUNK  ( 2)
  35. #define FREE_CHUNK(x) ((x)<0)
  36.  
  37. /* Minimum size for a store area in a ReSizable Objects Chunk :
  38.  */
  39. #define RSOC_MIN_STORE 512
  40.  
  41. typedef struct s_mch mch; /* Memory Chunk Header. */
  42. typedef struct s_fsoc fsoc; /* Fixed Size Objects Chunk. */
  43. typedef union u_rsoh rsoh; /* ReSizable Object Header. */
  44. typedef struct s_fll_rsoh fll_rsoh; 
  45. typedef struct s_rsoc rsoc; /* ReSizable Objects Chunk. */
  46. typedef struct s_na_env na_env; /* Native Array ENVironment. */
  47.  
  48.  
  49. struct s_mch{ 
  50.   int size; /* In number of bytes (actual argument of malloc).*/
  51.   int state_type; /* One value in : RSO_USED_CHUNK, 
  52.                      FREE_CHUNK, FSO_STORE_CHUNK, FSO_USED_CHUNK */
  53.   void(*amfp)(mch*,void*); /* Align Mark Function Pointer. */
  54.   void(*swfp)(mch*); /* SWeep Function Pointer. */
  55. };
  56.  
  57. struct s_fsoc{
  58.   mch header;
  59.   fsoc* next;
  60.   int count_minus_one;
  61.   double first_object;
  62. };
  63.  
  64. typedef struct _rso_header rso_header;
  65.  
  66. struct _rso_header{
  67.     int size;
  68.     int magic_flag;     /* RSOH_MARKED when used,
  69.                RSOH_FREE when free,
  70.                else RSOH_UNMARKED */
  71. };
  72.  
  73. union u_rsoh{
  74.   rso_header header;             
  75.   double padding; 
  76.   };
  77.  
  78. struct s_fll_rsoh {
  79.   rso_header rsoh_field;
  80.   fll_rsoh* nextflol;
  81. };
  82.  
  83. struct s_rsoc{
  84.   mch header;
  85.   rsoc* next;
  86.   fll_rsoh*free_list_of_large;
  87.   na_env*nae;
  88.   rsoh first_header;
  89. };
  90.  
  91. struct s_na_env{
  92.   int store_left;
  93.   rsoh* store;
  94.   rsoc*store_chunk;
  95.   rsoc*chunk_list;
  96.   void (*gc_mark)(T0*);
  97. };
  98.  
  99. extern void**stack_bottom;
  100. extern mch**gcmt;
  101. extern int gcmt_max;
  102. extern int gcmt_used;
  103. extern fsoc*fsocfl;
  104. extern rsoc*rsocfl;
  105. extern int gc_is_off;
  106. extern unsigned int fsoc_count;
  107. extern unsigned int rsoc_count;
  108. extern void*gcmt_tail_addr;
  109.  
  110. int na_rounded_size(int s);
  111. void gc_sweep(void);
  112. void gc_mark(void*p);
  113. int gc_stack_size(void);
  114. int garbage_delayed(void);
  115. void gc_update_ceils(void);
  116. fsoc*new_fsoc(void);
  117. char*new_na(na_env*nae,int size);
  118. void gcna_align_mark(rsoc*c,void*o);
  119. int fsocfl_count(void);
  120. int rsocfl_count(void);
  121. void gc_dispose_before_exit(void);
  122.