Graphviz 14.1.3~dev.20260207.0611
Loading...
Searching...
No Matches
util.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 <assert.h>
14#include <limits.h>
15#include <pathplan/pathutil.h>
16#include <stdlib.h>
17#include <util/list.h>
18
20 free(p->ps);
21 free(p);
22}
23
24int Ppolybarriers(Ppoly_t **polys, int npolys, Pedge_t **barriers,
25 int *n_barriers) {
26 LIST(Pedge_t) bar = {0};
27
28 for (int i = 0; i < npolys; i++) {
29 const Ppoly_t pp = *polys[i];
30 for (size_t j = 0; j < pp.pn; j++) {
31 size_t k = j + 1;
32 if (k >= pp.pn)
33 k = 0;
34 LIST_APPEND(&bar, ((Pedge_t){.a = pp.ps[j], .b = pp.ps[k]}));
35 }
36 }
37 size_t n;
38 LIST_DETACH(&bar, barriers, &n);
39 assert(n <= INT_MAX);
40 *n_barriers = (int)n;
41 return 1;
42}
43
45 static LIST(Ppoint_t) ispline;
46 LIST_CLEAR(&ispline);
47
48 size_t i = 0;
49 LIST_APPEND(&ispline, line.ps[i]);
50 LIST_APPEND(&ispline, line.ps[i]);
51 i++;
52 for (; i + 1 < line.pn; i++) {
53 LIST_APPEND(&ispline, line.ps[i]);
54 LIST_APPEND(&ispline, line.ps[i]);
55 LIST_APPEND(&ispline, line.ps[i]);
56 }
57 LIST_APPEND(&ispline, line.ps[i]);
58 LIST_APPEND(&ispline, line.ps[i]);
59
60 sline->pn = LIST_SIZE(&ispline);
61 sline->ps = LIST_FRONT(&ispline);
62}
63
void free(void *)
type-generic dynamically expanding list
#define LIST_DETACH(list, datap, sizep)
Definition list.h:443
#define LIST(type)
Definition list.h:55
#define LIST_SIZE(list)
Definition list.h:80
#define LIST_CLEAR(list)
Definition list.h:240
#define LIST_APPEND(list, item)
Definition list.h:120
#define LIST_FRONT(list)
Definition list.h:180
size_t pn
Definition pathgeom.h:47
Ppoint_t * ps
Definition pathgeom.h:46
void make_polyline(Ppolyline_t line, Ppolyline_t *sline)
Definition util.c:44
void freePath(Ppolyline_t *p)
Definition util.c:19
int Ppolybarriers(Ppoly_t **polys, int npolys, Pedge_t **barriers, int *n_barriers)
Definition util.c:24