Statistics
| Revision:

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