<h2>Internal Runtime Utility Functions</h2> <h3>SHA1 Signatures</h3> <h4><a name="api:mono_sha1_init">mono_sha1_init</a></h4> <h4><a name="api:mono_sha1_update">mono_sha1_update</a></h4> <h4><a name="api:mono_sha1_get_digest_from_file">mono_sha1_get_digest_from_file</a></h4> <h4><a name="api:mono_sha1_get_digest">mono_sha1_get_digest</a></h4> <h4><a name="api:mono_sha1_final">mono_sha1_final</a></h4> <h3>MD5 Signatures</h3> <h4><a name="api:mono_md5_init">mono_md5_init</a></h4> <h4><a name="api:mono_md5_update">mono_md5_update</a></h4> <h4><a name="api:mono_md5_get_digest_from_file">mono_md5_get_digest_from_file</a></h4> <h4><a name="api:mono_md5_get_digest">mono_md5_get_digest</a></h4> <h4><a name="api:mono_md5_final">mono_md5_final</a></h4> <h4><a name="api:mono_digest_get_public_token">mono_digest_get_public_token</a></h4> <h3>Hashtables</h3> <p><tt>GHashTable</tt> is used when you need to store object references into a hashtable, objects stored in a <tt>MonoGHashTable</tt> are properly tracked by the garbage collector. <p>The <tt>MonoGHashTable</tt> data type has the same API as the GLIB. <h4><a name="api:mono_g_hash_table_destroy">mono_g_hash_table_destroy</a></h4> <h4><a name="api:mono_g_hash_table_foreach">mono_g_hash_table_foreach</a></h4> <h4><a name="api:mono_g_hash_table_foreach_remove">mono_g_hash_table_foreach_remove</a></h4> <h4><a name="api:mono_g_hash_table_insert">mono_g_hash_table_insert</a></h4> <h4><a name="api:mono_g_hash_table_lookup">mono_g_hash_table_lookup</a></h4> <h4><a name="api:mono_g_hash_table_lookup_extended">mono_g_hash_table_lookup_extended</a></h4> <h4><a name="api:mono_g_hash_table_remove">mono_g_hash_table_remove</a></h4> <h4><a name="api:mono_g_hash_table_replace">mono_g_hash_table_replace</a></h4> <h4><a name="api:mono_g_hash_table_size">mono_g_hash_table_size</a></h4> <h3>Memory Pools</h3> <p>Memory pools are a convenient way of tracking memory allocations that are used for one specific task, they are also faster than using the standard memory allocation procedures, as they are designed to be used only by a single thread at a time. <p><tt>MonoMemPool</tt> objects are not thread safe, which means that you should not share the objects across multiple threads without providing proper locking around it (unlike <tt>malloc</tt> and <tt>free</tt> which are thread safe). <p>When a <tt>MonoMemPool</tt> is released with <tt>mono_mempool_destroy</tt> all of the of the memory allocated from that memory pool with <tt>mono_mempool_alloc</tt> and <tt>mono_mempool_alloc0</tt> is released. <h4><a name="api:mono_mempool_new">mono_mempool_new</a></h4> <h4><a name="api:mono_mempool_destroy">mono_mempool_destroy</a></h4> <h4><a name="api:mono_mempool_alloc">mono_mempool_alloc</a></h4> <h4><a name="api:mono_mempool_alloc0">mono_mempool_alloc0</a></h4> <h4><a name="api:mono_mempool_invalidate">mono_mempool_invalidate</a></h4> <h4><a name="api:mono_mempool_stats">mono_mempool_stats</a></h4> <h4><a name="api:mono_mempool_contains_addr">mono_mempool_contains_addr</a></h4> <h3>Bitsets</h3> <p>MonoBitsets are a set of routines used to manipulate sets of bits. <h4><a name="api:mono_bitset_alloc_size">mono_bitset_alloc_size</a></h4> <h4><a name="api:mono_bitset_clear">mono_bitset_clear</a></h4> <h4><a name="api:mono_bitset_clear_all">mono_bitset_clear_all</a></h4> <h4><a name="api:mono_bitset_clone">mono_bitset_clone</a></h4> <h4><a name="api:mono_bitset_copyto">mono_bitset_copyto</a></h4> <h4><a name="api:mono_bitset_count">mono_bitset_count</a></h4> <h4><a name="api:mono_bitset_equal">mono_bitset_equal</a></h4> <h4><a name="api:mono_bitset_find_first">mono_bitset_find_first</a></h4> <h4><a name="api:mono_bitset_find_last">mono_bitset_find_last</a></h4> <h4><a name="api:mono_bitset_find_start">mono_bitset_find_start</a></h4> <h4><a name="api:mono_bitset_foreach">mono_bitset_foreach</a></h4> <h4><a name="api:mono_bitset_free">mono_bitset_free</a></h4> <h4><a name="api:mono_bitset_intersection">mono_bitset_intersection</a></h4> <h4><a name="api:mono_bitset_invert">mono_bitset_invert</a></h4> <h4><a name="api:mono_bitset_mem_new">mono_bitset_mem_new</a></h4> <h4><a name="api:mono_bitset_new">mono_bitset_new</a></h4> <h4><a name="api:mono_bitset_set">mono_bitset_set</a></h4> <h4><a name="api:mono_bitset_set_all">mono_bitset_set_all</a></h4> <h4><a name="api:mono_bitset_size">mono_bitset_size</a></h4> <h4><a name="api:mono_bitset_sub">mono_bitset_sub</a></h4> <h4><a name="api:mono_bitset_test">mono_bitset_test</a></h4> <h4><a name="api:mono_bitset_test_bulk">mono_bitset_test_bulk</a></h4> <h4><a name="api:mono_bitset_union">mono_bitset_union</a></h4> <h4><a name="api:mono_bitset_find_first_unset">mono_bitset_find_first_unset</a></h4> <h4><a name="api:mono_bitset_intersection_2">mono_bitset_intersection_2</a></h4> <h3>JIT utilities</h3> <h4><a name="api:mono_signbit_double">mono_signbit_double</a></h4> <h4><a name="api:mono_signbit_float">mono_signbit_float</a></h4> <h3>Function Pointers</h3> <p>To wrap a function pointer into something that the Mono runtime can consume, you should use the mono_create_ftnptr. This is only important if you plan on running on the IA64 architecture. Otherwise you can just use the function pointer address. <h4><a name="api:mono_create_ftnptr">mono_create_ftnptr</a></h4> <h2>Notification Interface</h2> <p>This is an internal profiler interface. In general, users would not be using this interface, but would be using the profiler interface. <p>These methods must be called to notify the profiler of an event that must be recorded. Mono's JIT engine currently calls these routines, but if you are extending Mono in some way these are the methods that you might invoke to notify the profiler of an event. <h4><a name="api:mono_profiler_load">mono_profiler_load</a></h4> <h4><a name="api:mono_profiler_allocation">mono_profiler_allocation</a></h4> <h4><a name="api:mono_profiler_stat_hit">mono_profiler_stat_hit</a></h4> <h4><a name="api:mono_profiler_thread_start">mono_profiler_thread_start</a></h4> <h4><a name="api:mono_profiler_thread_end">mono_profiler_thread_end</a></h4> <h4><a name="api:mono_profiler_appdomain_event">mono_profiler_appdomain_event</a></h4> <h4><a name="api:mono_profiler_appdomain_loaded">mono_profiler_appdomain_loaded</a></h4> <h4><a name="api:mono_profiler_assembly_event">mono_profiler_assembly_event</a></h4> <h4><a name="api:mono_profiler_assembly_loaded">mono_profiler_assembly_loaded</a></h4> <h4><a name="api:mono_profiler_class_event">mono_profiler_class_event</a></h4> <h4><a name="api:mono_profiler_class_loaded">mono_profiler_class_loaded</a></h4> <h4><a name="api:mono_profiler_code_transition">mono_profiler_code_transition</a></h4> <h4><a name="api:mono_profiler_method_end_jit">mono_profiler_method_end_jit</a></h4> <h4><a name="api:mono_profiler_method_enter">mono_profiler_method_enter</a></h4> <h4><a name="api:mono_profiler_method_jit">mono_profiler_method_jit</a></h4> <h4><a name="api:mono_profiler_method_leave">mono_profiler_method_leave</a></h4> <h4><a name="api:mono_profiler_module_event">mono_profiler_module_event</a></h4> <h4><a name="api:mono_profiler_module_loaded">mono_profiler_module_loaded</a></h4> <h4><a name="api:mono_profiler_shutdown">mono_profiler_shutdown</a></h4> <h4><a name="api:mono_profiler_startup">mono_profiler_startup</a></h4> <h4><a name="api:mono_profiler_gc_event">mono_profiler_gc_event</a></h4> <h4><a name="api:mono_profiler_gc_heap_resize">mono_profiler_gc_heap_resize</a></h4> <h4><a name="api:mono_profiler_stat_hit">mono_profiler_stat_hit</a></h4>