mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-19 05:33:44 -04:00
grid: implement a memmove-sort-of function
grid_memmove() moves cell data from one index to another, taking the grid offset into account.
This commit is contained in:
parent
b45b492f41
commit
482f56b4a2
2 changed files with 34 additions and 0 deletions
33
grid.c
33
grid.c
|
|
@ -40,3 +40,36 @@ grid_memset(struct grid *grid, size_t start, int c, size_t length)
|
||||||
start += count;
|
start += count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
grid_memmove(struct grid *grid, size_t dst, size_t src, size_t length)
|
||||||
|
{
|
||||||
|
size_t left = length;
|
||||||
|
size_t copy_idx = 0;
|
||||||
|
struct cell copy[left];
|
||||||
|
|
||||||
|
while (left > 0) {
|
||||||
|
size_t count = left;
|
||||||
|
struct cell *src_cells = grid_get_range(grid, src, &count);
|
||||||
|
|
||||||
|
memcpy(©[copy_idx], src_cells, count * sizeof(copy[0]));
|
||||||
|
|
||||||
|
left -= count;
|
||||||
|
src += count;
|
||||||
|
copy_idx += count;
|
||||||
|
}
|
||||||
|
|
||||||
|
left = length;
|
||||||
|
copy_idx = 0;
|
||||||
|
|
||||||
|
while (left > 0) {
|
||||||
|
size_t count = left;
|
||||||
|
struct cell *dst_cells = grid_get_range(grid, dst, &count);
|
||||||
|
|
||||||
|
memcpy(dst_cells, ©[copy_idx], count * sizeof(copy[0]));
|
||||||
|
|
||||||
|
left -= count;
|
||||||
|
dst += count;
|
||||||
|
copy_idx += count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
1
grid.h
1
grid.h
|
|
@ -5,3 +5,4 @@
|
||||||
|
|
||||||
struct cell *grid_get_range(struct grid *grid, size_t start, size_t *length);
|
struct cell *grid_get_range(struct grid *grid, size_t start, size_t *length);
|
||||||
void grid_memset(struct grid *grid, size_t start, int c, size_t length);
|
void grid_memset(struct grid *grid, size_t start, int c, size_t length);
|
||||||
|
void grid_memmove(struct grid *grid, size_t dst, size_t src, size_t length);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue