diff options
Diffstat (limited to 'src/depmap.c')
-rw-r--r-- | src/depmap.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/depmap.c b/src/depmap.c index cb50548..d2bf536 100644 --- a/src/depmap.c +++ b/src/depmap.c @@ -1,8 +1,8 @@ /* This file is part of GNU Pies. - Copyright (C) 2008-2013, 2016-2017 Sergey Poznyakoff + Copyright (C) 2008-2019 Sergey Poznyakoff GNU Pies is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. @@ -47,31 +47,31 @@ TC (unsigned *R, int n) mask = 1; rowi = R; while (rowi < relend) { ccol = cword; rowj = R; - + while (rowj < relend) { if (*ccol & mask) { rp = rowi; rend = (unsigned *) ((char *) rowj + rowsize); - + while (rowj < rend) *rowj++ |= *rp++; } else { rowj = (unsigned *) ((char *) rowj + rowsize); } - + ccol = (unsigned *) ((char *) ccol + rowsize); } - + mask <<= 1; if (mask == 0) { mask = 1; cword++; } @@ -82,30 +82,30 @@ TC (unsigned *R, int n) struct pies_depmap { size_t nrows; /* Number of rows (== number of mapped elements) */ size_t rowlen; /* Length of a row in words */ unsigned r[1]; /* Data rows */ }; - + pies_depmap_t depmap_alloc (size_t count) { size_t size = (count + BITS_PER_WORD - 1) / BITS_PER_WORD; - pies_depmap_t dmap = grecs_zalloc (sizeof (*dmap) - 1 + pies_depmap_t dmap = grecs_zalloc (sizeof (*dmap) - 1 + count * size * sizeof (unsigned)); dmap->nrows = count; dmap->rowlen = size; return dmap; } /* Return size of a depmap row in bytes */ static inline size_t depmap_row_size (pies_depmap_t dpm) { return dpm->rowlen * sizeof (unsigned); -} +} pies_depmap_t depmap_copy (pies_depmap_t dpm) { pies_depmap_t copy = depmap_alloc (dpm->nrows); memcpy (copy->r, dpm->r, dpm->nrows * depmap_row_size (dpm)); @@ -155,15 +155,15 @@ size_t depmap_next (pies_depmap_t dmap, pies_depmap_pos_t pos) { for (pos->coord[pos->dir]++; pos->coord[pos->dir] < dmap->nrows; pos->coord[pos->dir]++) if (depmap_isset (dmap, pos->coord[0], pos->coord[1])) break; - + return pos->coord[pos->dir] == dmap->nrows ? - (size_t) -1 : pos->coord[pos->dir]; + (size_t) -1 : pos->coord[pos->dir]; } size_t depmap_first (pies_depmap_t dmap, enum pies_depmap_direction dir, size_t coord, pies_depmap_pos_t *ppos) { @@ -185,13 +185,13 @@ depmap_end (pies_depmap_pos_t pos) void depmap_remove (pies_depmap_t dmap, size_t n) { if (n < dmap->nrows - 1) { size_t i, j; - + /* Remove nth row */ memmove (depmap_rowptr (dmap, n), depmap_rowptr (dmap, n + 1), (dmap->nrows - n - 1) * depmap_row_size (dmap)); /* Renumber all columns j >= n: j = j - 1 */ for (i = 0; i < dmap->nrows; i++) for (j = n; j < dmap->nrows - 1; j++) |