File: nodeq.c

package info (click to toggle)
graphviz 1.7.16-2
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 11,124 kB
  • ctags: 12,650
  • sloc: ansic: 131,002; sh: 7,483; makefile: 1,954; tcl: 1,760; yacc: 1,758; perl: 253; awk: 150; lex: 96
file content (40 lines) | stat: -rw-r--r-- 673 bytes parent folder | download
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
#include <agraph.h>
#include <agutil.h>

/* node Nqueue maintenance */

Nqueue *Nqueue_new(Agraph_t *g)
{
	Nqueue		*q;
	int			sz;

	q = agnew(g,Nqueue);
	sz = agnnodes(g);
	if (sz <= 1) sz = 2;
	q->head = q->tail = q->store = agnnew(g,sz,Agnode_t*);
	q->limit = q->store + sz;
	return q;
}

void Nqueue_free(Agraph_t *g, Nqueue *q)
{
	agfree(g,q->store);
	agfree(g,q);
}

void Nqueue_insert(Nqueue *q, Agnode_t *n)
{
	*(q->tail++) = n;
	if (q->tail >= q->limit) q->tail = q->store;
}

Agnode_t * Nqueue_remove(Nqueue *q)
{
	Agnode_t	*n;
	if (q->head == q->tail) n = NIL(Agnode_t*);
	else {
		n = *(q->head++);
		if (q->head >= q->limit) q->head = q->store;
	}
	return n;
}