summaryrefslogtreecommitdiff
path: root/tree/optimize.c
blob: 14d982322baa9f3673d6b532f3aa5c1ded7ca1ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <fitz.h>

/*
 * Remove useless overs that only have one child.
 */

static void cleanovers(fz_node *node)
{
	fz_node *prev;
	fz_node *over;
	fz_node *child;

	prev = nil;
	for (over = node->first; over; over = prev->next)
	{
		cleanovers(over);

		if (fz_isovernode(over))
		{
			if (over->first == over->last)
			{
				printf("  remove unused over node\n");
				child = over->first;
				fz_removenode(over);
				if (child)
				{
					if (prev)
						fz_insertnodeafter(prev, child);
					else
						fz_insertnodefirst(node, child);
				}
				over = nil;
			}
		}

		if (over)
			prev = over;
	}
}

fz_error *
fz_optimizetree(fz_tree *tree)
{
	printf("optimizing tree\n");

//printf("before:\n");
//fz_debugtree(tree);

	cleanovers(tree->root);

//printf("after:\n");
//fz_debugtree(tree);

	return nil;
}