/* heap-utils.h
*
* General utilities for displaying heap statistics
*/
#ifndef heap_utils_h
#define heap_utils_h
#include "mps.h" /* MPS Interface */
#include "mpslib.h" /* plinth interface */
#ifdef LINUX_PLATFORM
#include "linux-types.h"
#else
#include "win32-types.h"
#endif
/* top-level interface functions */
extern void display_heap_stats_order_1 (void);
extern void display_heap_stats_order_2 (void);
extern void display_reference_trails (void);
extern void display_wrapper_breakpoints();
/* control of filtering for order_2 stats */
extern BOOL add_filter (void *wrapper);
extern void clear_filters (void);
/* control of aggregation classes for order_2 stats */
typedef struct ag_class_s *ag_class_t;
extern ag_class_t create_aggregation_class (char* name);
extern BOOL map_aggregation_class (void *wrapper, ag_class_t agclass);
extern void clear_aggregation_classes (void);
/* mid-level interface for maintaing wrapper stats */
#include "wrapper-stats.h"
#define STAT_SIZE 10000
extern wrapper_stats_s wrapper_stats[STAT_SIZE];
extern void clear_wrapper_stats ();
extern void display_wrapper_stats ();
extern void add_stat_for_object (void *object, void* wrapper, int size);
extern void set_wrapper_breakpoint (void *wrapper, int count);
extern void clear_wrapper_breakpoint (void *wrapper);
extern void check_wrapper_breakpoint (void *wrapper, int size);
extern BOOL check_wrapper_breakpoint_for_objectQ;
extern int wrapper_breaks_cursor;
/* General implementation support */
extern void report_message (char* message);
extern void report_error (char* message);
extern void report_break (char* message);
extern int object_repeated_size (void *object, int fixed_offset);
extern int size_of_object (void *object, void* wrapper);
/* tracer function should return FALSE to abort tracing further fields */
typedef BOOL (*object_tracer_t)(mps_addr_t object, mps_addr_t parent,
int parent_size, void *env);
extern int trace_object (mps_addr_t parent, object_tracer_t fn, void* env);
extern char* class_name_from_wrapper (void* wrapper);
extern void display_integer (int integer, mps_lib_FILE *stream);
extern void display_hex_address (void *address, mps_lib_FILE *stream);
extern void display_padding_for_string(char *string, char pad,
int field, mps_lib_FILE *stream);
extern void *alloc_obj(size_t size);
extern void free_obj(void *obj, size_t size);
/* some variables defined elsewhere in the runtime */
extern mps_arena_t arena;
extern int mps_lib_fputs_(const char *s, int end, mps_lib_FILE *stream);
extern void mps_lib_abort(void);
/* class_name_size
* a reasonable constant width for displaying Dylan class names
*/
#define class_name_size 45
/* The hash table interface */
typedef struct table_s *table_t;
extern BOOL table_create(table_t *tableReturn, size_t length);
extern void table_destroy(table_t table);
extern BOOL table_define(table_t table, void *key, void *value);
extern BOOL table_redefine(table_t table, void *key, void *value);
extern BOOL table_lookup(void **valueReturn, table_t table, void *key);
extern BOOL table_remove(table_t table, void *key);
extern size_t table_count(table_t table);
extern void table_map(table_t table, void(*fun)(void *key, void *value));
#endif /* heap_utils_h */
syntax highlighted by Code2HTML, v. 0.9.1