Graphviz 14.1.2~dev.20260118.1035
Loading...
Searching...
No Matches
edgelist.c
Go to the documentation of this file.
1/*************************************************************************
2 * Copyright (c) 2011 AT&T Intellectual Property
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * https://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors: Details at https://graphviz.org
9 *************************************************************************/
10
11#include "config.h"
12
13#include <circogen/edgelist.h>
14#include <assert.h>
15#include <util/alloc.h>
16
17static void *mkItem(void *p, Dtdisc_t *disc) {
18 (void)disc;
19 edgelistitem *obj = p;
20
21 edgelistitem *ap = gv_alloc(sizeof(edgelistitem));
22
23 ap->edge = obj->edge;
24 return ap;
25}
26
27static int cmpItem(void *k1, void *k2) {
28 const Agedge_t **key1 = k1;
29 const Agedge_t **key2 = k2;
30 if (*key1 > *key2) {
31 return 1;
32 }
33 if (*key1 < *key2) {
34 return -1;
35 }
36 return 0;
37}
38
39static Dtdisc_t ELDisc = {
40 offsetof(edgelistitem, edge), /* key */
41 sizeof(Agedge_t *), /* size */
42 offsetof(edgelistitem, link), /* link */
43 mkItem,
44 free,
45 cmpItem,
46};
47
49{
50 edgelist *list = dtopen(&ELDisc, Dtoset);
51 return list;
52}
53
55{
56 dtclose(list);
57}
58
59void add_edge(edgelist * list, Agedge_t * e)
60{
61 edgelistitem temp;
62
63 temp.edge = e;
64 dtinsert(list, &temp);
65}
66
67void remove_edge(edgelist * list, Agedge_t * e)
68{
69 edgelistitem temp;
70
71 temp.edge = e;
72 dtdelete(list, &temp);
73}
74
75#ifdef DEBUG
76void print_edge(edgelist * list)
77{
78 edgelistitem *temp;
79 Agedge_t *ep;
80
81 for (temp = (edgelistitem *) dtflatten(list); temp;
82 temp = (edgelistitem *)dtlink(list, temp)) {
83 ep = temp->edge;
84 fprintf(stderr, "%s--", agnameof(agtail(ep)));
85 fprintf(stderr, "%s \n", agnameof(aghead(ep)));
86 }
87 fputs("\n", stderr);
88}
89#endif
Memory allocation wrappers that exit on failure.
static void * gv_alloc(size_t size)
Definition alloc.h:47
CDT_API Dtlink_t * dtflatten(Dt_t *)
Definition dtflatten.c:12
#define dtlink(d, e)
Definition cdt.h:176
#define dtinsert(d, o)
Definition cdt.h:186
CDT_API int dtclose(Dt_t *)
Definition dtclose.c:10
CDT_API Dtmethod_t * Dtoset
ordered set (self-adjusting tree)
Definition dttree.c:306
#define dtdelete(d, o)
Definition cdt.h:187
CDT_API Dt_t * dtopen(Dtdisc_t *, Dtmethod_t *)
Definition dtopen.c:11
void add_edge(edgelist *list, Agedge_t *e)
Definition edgelist.c:59
edgelist * init_edgelist(void)
Definition edgelist.c:48
void free_edgelist(edgelist *list)
Definition edgelist.c:54
static void * mkItem(void *p, Dtdisc_t *disc)
Definition edgelist.c:17
static int cmpItem(void *k1, void *k2)
Definition edgelist.c:27
void remove_edge(edgelist *list, Agedge_t *e)
Definition edgelist.c:67
static Dtdisc_t ELDisc
Definition edgelist.c:39
static Dtdisc_t disc
Definition exparse.y:209
void free(void *)
edge
Definition gmlparse.y:244
#define agtail(e)
Definition cgraph.h:977
#define aghead(e)
Definition cgraph.h:978
char * agnameof(void *)
returns a string descriptor for the object.
Definition id.c:145
Definition cdt.h:98
Agedge_t * edge
Definition edgelist.h:21