void RowMapErase(RowMap *m, Row *key) { RowIterator iter = RowMapFindWithKey(m, key); if (iter == RowMapEnd(m)) return; RowCleanup(GetRow(iter)); bsd_rb_tree_remove_node(&m->tree, iter); }
/* * Cleans up resources and calls pg_free on s */ void ScreenDestroy(Screen *s) { /* resets the tty to original state */ endwin(); /* ncurses resource cleanup */ delscreen(s->nterm); fclose(s->term_in); RowCleanup(&s->key); memset(s, 0, sizeof(Screen)); pg_free(s); }
void RowMapUpdate(RowMap *m, Row *row) { TreeNode *res = 0; TreeNode *new_node = pg_malloc0(sizeof(TreeNode)); new_node->row = *row; res = bsd_rb_tree_insert_node(&m->tree, new_node); if (res != new_node) { /* replace old contents, free unneeded new node */ RowCleanup(&res->row); res->row = *row; pg_free(new_node); } }
/* clean up all the rows, and row storage and call pg_free on m */ void RowMapDestroy(RowMap *m) { void *node = bsd_rb_tree_iterate(&m->tree, 0, 0); while(node != 0) { Row *row; void *delnode; row = GetRow(node); delnode = node; node = bsd_rb_tree_iterate(&m->tree, node, 1); bsd_rb_tree_remove_node(&m->tree, delnode); RowCleanup(row); pg_free(delnode); } memset(m, 0, sizeof(RowMap)); pg_free(m); }
static void inline clear_key(Screen *s) { RowCleanup(&s->key); }
static void inline set_key(Screen *s, Row r) { RowCleanup(&s->key); s->key = r; }