#ifndef MMTK_H
#define MMTK_H
#include <stdbool.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef void* MMTk_Mutator;
typedef void* MMTk_Builder;
typedef void* MMTk;
extern MMTk mmtk_init(MMTk_Builder builder);
extern MMTk_Mutator mmtk_bind_mutator(void* tls);
extern void mmtk_destroy_mutator(MMTk_Mutator mutator);
extern void mmtk_flush_mutator(MMTk_Mutator mutator);
extern void mmtk_initialize_collection(void* tls);
extern void mmtk_enable_collection();
extern void mmtk_disable_collection();
extern void* mmtk_alloc(MMTk_Mutator mutator,
size_t size,
size_t align,
ssize_t offset,
int allocator);
extern void* mmtk_alloc_slow(MMTk_Mutator mutator,
size_t size,
size_t align,
ssize_t offset,
int allocator);
extern void mmtk_post_alloc(MMTk_Mutator mutator,
void* refer,
int bytes,
int allocator);
extern bool mmtk_is_live_object(void* ref);
extern bool mmtk_is_mapped_object(void* ref);
extern bool mmtk_is_mapped_address(void* addr);
extern void mmtk_modify_check(void* ref);
extern bool mmtk_will_never_move(void* object);
extern bool mmtk_process(MMTk_Builder builder, char* name, char* value);
extern bool mmtk_process_bulk(MMTk_Builder builder, char* options);
extern void mmtk_scan_region();
extern void mmtk_handle_user_collection_request(void* tls);
extern void mmtk_start_control_collector(void* tls, void* worker);
extern void mmtk_start_worker(void* tls, void* worker);
extern size_t mmtk_free_bytes();
extern size_t mmtk_used_bytes();
extern size_t mmtk_total_bytes();
extern void* mmtk_starting_heap_address();
extern void* mmtk_last_heap_address();
extern void mmtk_add_weak_candidate(void* ref);
extern void mmtk_add_soft_candidate(void* ref);
extern void mmtk_add_phantom_candidate(void* ref);
extern void mmtk_harness_begin(void* tls);
extern void mmtk_harness_end();
#ifdef __cplusplus
}
#endif
#endif