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 |
