示例#1
0
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);
}
示例#2
0
/*
 * 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);
}
示例#3
0
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);
	}
}
示例#4
0
/* 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);
}
示例#5
0
static void inline
clear_key(Screen *s)
{
	RowCleanup(&s->key);
}
示例#6
0
static void inline
set_key(Screen *s, Row r)
{
	RowCleanup(&s->key);
	s->key = r;
}