aboutsummaryrefslogtreecommitdiff
path: root/src/depmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/depmap.c')
-rw-r--r--src/depmap.c22
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++)

Return to:

Send suggestions and report system problems to the System administrator.