1
/***************************************************************
5
* AUTHOR(S): Martin Pavlovsky (Google SoC 2008, Paul Kelly mentor)
6
* Based on "dct" by Geoff Leach, Department of Computer
9
* PURPOSE: Creates a Delaunay triangulation vector map
11
* COPYRIGHT: (C) RMIT 1993
12
* (C) 2008-2009 by the GRASS Development Team
14
* This program is free software under the GNU General
15
* Public License (>=v2). Read the file COPYING that
16
* comes with GRASS for details.
18
* The following notices apply to portions of the code originally
19
* derived from work by Geoff Leach of RMIT:
21
* Author: Geoff Leach, Department of Computer Science, RMIT.
22
* email: gl@cs.rmit.edu.au
28
* Copyright (c) RMIT 1993. All rights reserved.
30
* License to copy and use this software purposes is granted provided
31
* that appropriate credit is given to both RMIT and the author.
33
* License is also granted to make and use derivative works provided
34
* that appropriate credit is given to both RMIT and the author.
36
* RMIT makes no representations concerning either the merchantability
37
* of this software or the suitability of this software for any particular
38
* purpose. It is provided "as is" without express or implied warranty
41
* These notices must be retained in any copies of any part of this software.
43
**************************************************************/
46
#include <grass/gis.h>
47
#include <grass/glocale.h>
49
#include "data_types.h"
51
static struct edge *edges;
52
static struct edge **free_list_e;
54
static unsigned int n_free_e;
56
void alloc_memory(unsigned int n)
62
sites = (struct vertex *)G_calloc(n, sizeof(struct vertex));
64
G_fatal_error(_("Not enough memory."));
66
/* Edges. Euler's formula - at most 3n edges on a set of n sites */
68
edges = e = (struct edge *)G_calloc(n_free_e, sizeof(struct edge));
70
G_fatal_error(_("Not enough memory."));
72
free_list_e = (struct edge **)G_calloc(n_free_e, sizeof(struct edge *));
73
if (free_list_e == NULL)
74
G_fatal_error(_("Not enough memory."));
75
for (i = 0; i < n_free_e; i++, e++)
79
void alloc_sites(unsigned int n)
82
sites = (struct vertex *)G_calloc(n, sizeof(struct vertex));
84
G_fatal_error(_("Not enough memory."));
87
void realloc_sites(unsigned int n)
90
sites = (struct vertex *)G_realloc(sites, n * sizeof(struct vertex));
92
G_fatal_error(_("Not enough memory."));
95
void alloc_edges(unsigned int n)
100
/* Edges. Euler's formula - at most 3n edges on a set of n sites */
102
edges = e = (struct edge *)G_calloc(n_free_e, sizeof(struct edge));
104
G_fatal_error(_("Not enough memory."));
106
free_list_e = (struct edge **)G_calloc(n_free_e, sizeof(struct edge *));
107
if (free_list_e == NULL)
108
G_fatal_error(_("Not enough memory."));
109
for (i = 0; i < n_free_e; i++, e++)
121
struct edge *get_edge()
124
G_fatal_error(_("All allocated edges have been used."));
125
return (free_list_e[--n_free_e]);
128
void free_edge(struct edge *e)
130
free_list_e[n_free_e++] = e;