gvsig-raster / libjni-potrace / trunk / libjni-potrace / src / main / native / jpotrace / curve.c @ 1780
History | View | Annotate | Download (2.64 KB)
1 |
/* Copyright (C) 2001-2007 Peter Selinger.
|
---|---|
2 |
This file is part of Potrace. It is free software and it is covered
|
3 |
by the GNU General Public License. See the file COPYING for details. */
|
4 |
|
5 |
/* $Id: curve.c 147 2007-04-09 00:44:09Z selinger $ */
|
6 |
/* private part of the path and curve data structures */
|
7 |
|
8 |
#include <stdio.h> |
9 |
#include <stdlib.h> |
10 |
#include <string.h> |
11 |
|
12 |
#include "potracelib.h" |
13 |
#include "lists.h" |
14 |
#include "curve.h" |
15 |
|
16 |
#define SAFE_MALLOC(var, n, typ) \
|
17 |
if ((var = (typ *)malloc((n)*sizeof(typ))) == NULL) goto malloc_error |
18 |
|
19 |
/* ---------------------------------------------------------------------- */
|
20 |
/* allocate and free path objects */
|
21 |
|
22 |
path_t *path_new(void) {
|
23 |
path_t *p = NULL;
|
24 |
privpath_t *priv = NULL;
|
25 |
|
26 |
SAFE_MALLOC(p, 1, path_t);
|
27 |
memset(p, 0, sizeof(path_t)); |
28 |
SAFE_MALLOC(priv, 1, privpath_t);
|
29 |
memset(priv, 0, sizeof(privpath_t)); |
30 |
p->priv = priv; |
31 |
return p;
|
32 |
|
33 |
malloc_error:
|
34 |
free(p); |
35 |
free(priv); |
36 |
return NULL; |
37 |
} |
38 |
|
39 |
/* free the members of the given curve structure. Leave errno unchanged. */
|
40 |
static void privcurve_free_members(privcurve_t *curve) { |
41 |
free(curve->tag); |
42 |
free(curve->c); |
43 |
free(curve->vertex); |
44 |
free(curve->alpha); |
45 |
free(curve->alpha0); |
46 |
free(curve->beta); |
47 |
} |
48 |
|
49 |
/* free a path. Leave errno untouched. */
|
50 |
void path_free(path_t *p) {
|
51 |
if (p) {
|
52 |
if (p->priv) {
|
53 |
free(p->priv->pt); |
54 |
free(p->priv->lon); |
55 |
free(p->priv->sums); |
56 |
free(p->priv->po); |
57 |
privcurve_free_members(&p->priv->curve); |
58 |
privcurve_free_members(&p->priv->ocurve); |
59 |
} |
60 |
free(p->priv); |
61 |
/* do not free p->fcurve ! */
|
62 |
} |
63 |
free(p); |
64 |
} |
65 |
|
66 |
/* free a pathlist, leaving errno untouched. */
|
67 |
void pathlist_free(path_t *plist) {
|
68 |
path_t *p; |
69 |
|
70 |
list_forall_unlink(p, plist) { |
71 |
path_free(p); |
72 |
} |
73 |
} |
74 |
|
75 |
/* ---------------------------------------------------------------------- */
|
76 |
/* initialize and finalize curve structures */
|
77 |
|
78 |
typedef dpoint_t dpoint3_t[3]; |
79 |
|
80 |
/* initialize the members of the given curve structure to size m.
|
81 |
Return 0 on success, 1 on error with errno set. */
|
82 |
int privcurve_init(privcurve_t *curve, int n) { |
83 |
memset(curve, 0, sizeof(privcurve_t)); |
84 |
curve->n = n; |
85 |
SAFE_MALLOC(curve->tag, n, int);
|
86 |
SAFE_MALLOC(curve->c, n, dpoint3_t); |
87 |
SAFE_MALLOC(curve->vertex, n, dpoint_t); |
88 |
SAFE_MALLOC(curve->alpha, n, double);
|
89 |
SAFE_MALLOC(curve->alpha0, n, double);
|
90 |
SAFE_MALLOC(curve->beta, n, double);
|
91 |
return 0; |
92 |
|
93 |
malloc_error:
|
94 |
free(curve->tag); |
95 |
free(curve->c); |
96 |
free(curve->vertex); |
97 |
free(curve->alpha); |
98 |
free(curve->alpha0); |
99 |
free(curve->beta); |
100 |
return 1; |
101 |
} |
102 |
|
103 |
/* copy private to public curve structure */
|
104 |
void privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c) {
|
105 |
c->n = pc->n; |
106 |
c->tag = pc->tag; |
107 |
c->c = pc->c; |
108 |
} |
109 |
|