Mercurial > hg > wm
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 |