comparison Meerwald/coord.c @ 0:be303a3f5ea8

import
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Sun, 12 Aug 2007 13:14:34 +0200
parents
children f83ef905a63d
comparison
equal deleted inserted replaced
-1:000000000000 0:be303a3f5ea8
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include "coord.h"
4
5 struct coords *alloc_coords(int n) {
6 struct coords *c;
7
8 if (c = malloc(sizeof(struct coords)))
9 init_coords(c, n);
10 #ifdef DEBUG
11 else
12 fprintf(stderr, "alloc_coords(): malloc failed\n");
13 #endif
14
15 return c;
16 }
17
18 void free_coords(struct coords *c) {
19
20 #ifdef DEBUG
21 if (!c)
22 fprintf(stderr, "free_coords(): got NULL pointer\n");
23 #endif
24
25 free(c->values);
26 free(c);
27 }
28
29 int init_coords(struct coords *c, int n) {
30
31 #ifdef DEBUG
32 if (!c)
33 fprintf(stderr, "init_coords(): got NULL poiner\n");
34
35 if (n <= 0)
36 fprintf(stderr, "init_coords(): n out of range\n");
37 #endif
38
39 c->count = 0;
40 c->max = n;
41
42 if (c->values = malloc(n * sizeof(struct coord)))
43 return 0;
44 else
45 return -1;
46 }
47
48 int add_coord(struct coords *c, int x, int y) {
49 struct coord *v;
50 int n;
51
52 #ifdef DEBUG
53 if (!c)
54 fprintf(stderr, "add_coord(): got NULL pointer\n");
55
56 if (c->count >= c->max)
57 fprintf(stderr, "add_coord(): maximum reached\n");
58 #endif
59
60 v = c->values;
61
62 for (n = 0; n < c->count; v++, n++)
63 if (v->x == x && v->y == y) break;
64
65 if (n == c->count) {
66 v->x = x;
67 v->y = y;
68 c->count++;
69 return 0;
70 }
71 else
72 return -1;
73 }
74
75

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.