Graphviz 12.0.1~dev.20240716.0800
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 <cgraph/alloc.h>
12#include <circogen/edgelist.h>
13#include <assert.h>
14
16 (void)disc;
17
18 edgelistitem *ap = gv_alloc(sizeof(edgelistitem));
19
20 ap->edge = obj->edge;
21 return ap;
22}
23
24static int cmpItem(void *k1, void *k2) {
25 const Agedge_t **key1 = k1;
26 const Agedge_t **key2 = k2;
27 if (*key1 > *key2) {
28 return 1;
29 }
30 if (*key1 < *key2) {
31 return -1;
32 }
33 return 0;
34}
35
36static Dtdisc_t ELDisc = {
37 offsetof(edgelistitem, edge), /* key */
38 sizeof(Agedge_t *), /* size */
39 offsetof(edgelistitem, link), /* link */
41 free,
42 cmpItem,
43};
44
46{
47 edgelist *list = dtopen(&ELDisc, Dtoset);
48 return list;
49}
50
52{
53 dtclose(list);
54}
55
56void add_edge(edgelist * list, Agedge_t * e)
57{
58 edgelistitem temp;
59
60 temp.edge = e;
61 dtinsert(list, &temp);
62}
63
64void remove_edge(edgelist * list, Agedge_t * e)
65{
66 edgelistitem temp;
67
68 temp.edge = e;
69 dtdelete(list, &temp);
70}
71
72#ifdef DEBUG
73void print_edge(edgelist * list)
74{
75 edgelistitem *temp;
76 Agedge_t *ep;
77
78 for (temp = (edgelistitem *) dtflatten(list); temp;
79 temp = (edgelistitem *)dtlink(list, temp)) {
80 ep = temp->edge;
81 fprintf(stderr, "%s--", agnameof(agtail(ep)));
82 fprintf(stderr, "%s \n", agnameof(aghead(ep)));
83 }
84 fputs("\n", stderr);
85}
86#endif
Memory allocation wrappers that exit on failure.
static void * gv_alloc(size_t size)
Definition alloc.h:47
void *(* Dtmake_f)(void *, Dtdisc_t *)
Definition cdt.h:50
CDT_API Dtlink_t * dtflatten(Dt_t *)
Definition dtflatten.c:10
#define dtlink(d, e)
Definition cdt.h:183
#define dtinsert(d, o)
Definition cdt.h:193
CDT_API int dtclose(Dt_t *)
Definition dtclose.c:8
CDT_API Dtmethod_t * Dtoset
ordered set (self-adjusting tree)
Definition dttree.c:304
#define dtdelete(d, o)
Definition cdt.h:194
CDT_API Dt_t * dtopen(Dtdisc_t *, Dtmethod_t *)
Definition dtopen.c:9
void add_edge(edgelist *list, Agedge_t *e)
Definition edgelist.c:56
edgelist * init_edgelist(void)
Definition edgelist.c:45
void free_edgelist(edgelist *list)
Definition edgelist.c:51
static edgelistitem * mkItem(edgelistitem *obj, Dtdisc_t *disc)
Definition edgelist.c:15
static int cmpItem(void *k1, void *k2)
Definition edgelist.c:24
void remove_edge(edgelist *list, Agedge_t *e)
Definition edgelist.c:64
static Dtdisc_t ELDisc
Definition edgelist.c:36
void free(void *)
edge
Definition gmlparse.y:279
#define agtail(e)
Definition cgraph.h:889
#define aghead(e)
Definition cgraph.h:890
char * agnameof(void *)
returns a string descriptor for the object.
Definition id.c:158
Definition cdt.h:104
Agedge_t * edge
Definition edgelist.h:21