-void dictionary_init(dictionary_t*dict);
-void dictionary_put(dictionary_t*dict, string_t t1, void* t2);
-void dictionary_put2(dictionary_t*dict, const char* t1, void* t2);
-void* dictionary_lookup(dictionary_t*dict, const char*name);
-void dictionary_dump(dictionary_t*dict, FILE*fi, const char*prefix);
-void dictionary_del(dictionary_t*dict, const char* name);
-void dictionary_clear(dictionary_t*dict);
-void dictionary_destroy(dictionary_t*dict);
-
-char* strndup(const char*str, int size);
-
-void* qmalloc_internal(int len);
-void* qrealloc_internal(void*old, int len);
-void qfree_internal(void*old);
-
-#define qmalloc(len) qmalloc_internal(len)
-#define qrealloc(old, len) qmalloc_internal(old, len)
-#define qfree(old) qmalloc_internal(old)
+dict_t*dict_new();
+void dict_init(dict_t*dict);
+void dict_put(dict_t*dict, string_t t1, void* t2);
+void dict_put2(dict_t*dict, const char* t1, void* t2);
+stringarray_t* dict_index(dict_t*dict);
+int dict_count(dict_t* dict);
+void* dict_lookup(dict_t*dict, const char*name);
+void dict_dump(dict_t*dict, FILE*fi, const char*prefix);
+char dict_del(dict_t*dict, const char* name);
+void dict_foreach_value(dict_t*h, void (*runFunction)(void*));
+void dict_free_all(dict_t*h, void (*freeFunction)(void*));
+void dict_clear(dict_t*dict);
+void dict_destroy(dict_t*dict);
+
+void heap_init(heap_t*h,int n,int elem_size, int(*compare)(const void *, const void *));
+void heap_clear(heap_t*h);
+void heap_put(heap_t*h, void*e);
+int heap_size(heap_t*h);
+void* heap_max(heap_t*h);
+void* heap_chopmax(heap_t*h);
+void heap_dump(heap_t*h, FILE*fi);
+void** heap_flatten(heap_t*h);
+
+char* strdup_n(const char*str, int size);
+
+#ifdef __cplusplus
+}
+#endif