Ejemplo n.º 1
0
static void percolate_down(git_pqueue *q, size_t i)
{
	size_t child_node;
	void *moving_node = q->d[i];

	while ((child_node = maxchild(q, i)) != 0 &&
			q->cmppri(moving_node, q->d[child_node])) {
		q->d[i] = q->d[child_node];
		i = child_node;
	}

	q->d[i] = moving_node;
}
Ejemplo n.º 2
0
void
pqueue_dump(pqueue_t *q, FILE *out, pqueue_print_entry_f print)
{
	int i;

	fprintf(out, "posn\tleft\tright\tparent\tmaxchild\t...\n");
	for (i = 1; i < q->size ; i++) {
		fprintf(out, "%d\t%d\t%d\t%d\t%ul\t",
		        i,
		        left(i), right(i), parent(i),
		        (unsigned int)maxchild(q, i));
		print(out, q->d[i]);
	}
}
Ejemplo n.º 3
0
static void
percolate_down(pqueue_t *q, unsigned int i)
{
	unsigned int child_node;
	void *moving_node = q->d[i];
	pqueue_pri_t moving_pri = q->getpri(moving_node);

	while ((child_node = maxchild(q, i)) &&
	        q->cmppri(moving_pri, q->getpri(q->d[child_node]))) {
		q->d[i] = q->d[child_node];
		q->setpos(q->d[i], i);
		i = child_node;
	}

	q->d[i] = moving_node;
	q->setpos(moving_node, i);
}