diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-10 10:14:08 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-10 10:14:08 -0500 |
| commit | 89c7dc0951a00d49a5678ed90e728f4f64ebe928 (patch) | |
| tree | ac4de776679950d0d6aa2ff5658242a35e7ce070 /pkarr.h | |
| parent | 79e040d203e63ec79bb124215dcd1e940f7b676c (diff) | |
pkarr: PK_ARR_MOVE_IN_PLACE shift correct byte range
Diffstat (limited to 'pkarr.h')
| -rw-r--r-- | pkarr.h | 45 |
1 files changed, 41 insertions, 4 deletions
@@ -80,14 +80,39 @@ pk_arr_move_to_back(struct pk_arr *arr, uint32_t index) if (arr->next <= 1) return; #ifdef PK_ARR_MOVE_IN_PLACE uint32_t i, ii; - uint8_t *target = (uint8_t *)pk_new(arr->stride, arr->alignment, arr->bkt); - uint8_t *buffer = (uint8_t *)arr->data; + char *target = (char *)pk_new(arr->stride, arr->alignment, arr->bkt); + char *buffer = (char *)arr->data; + // copy bytes to temp buffer for (ii = 0, i = arr->stride * index; ii < arr->stride; ++ii, ++i) { target[ii] = buffer[i]; } + // shift everything forward + // arr->stride = 8 + // arr->next = 2 + // index = 0 + // + // for (i = 0; i < 8; ++i) { + // b[i] = b[i + 8] + // } + // b[00] = b[08] + // b[01] = b[09] + // ... + // b[07] = b[15] for (i = arr->stride * index; i < (arr->stride * (arr->next - 1)); ++i) { buffer[i] = buffer[i + arr->stride]; } + // copy temp buffer back into arr + // arr->stride = 8 + // arr->next = 2 + // index = 0 + // + // for (ii = 0, i = 8; ii < 8; ++ii, ++i) { + // b[i] = t[ii] + // } + // b[08] = t[00] + // b[09] = t[01] + // ... + // b[15] = t[07] for (ii = 0, i = arr->stride * (arr->next - 1); ii < arr->stride; ++ii, ++i) { buffer[i] = target[ii]; } @@ -138,8 +163,20 @@ pk_arr_remove_at(struct pk_arr *arr, uint32_t index) } #ifdef PK_ARR_MOVE_IN_PLACE uint32_t i; - uint8_t *buffer = (uint8_t *)arr->data; - for (i = arr->stride * index; i < (arr->stride * (arr->next - 1)); ++i) { + char *buffer = (char *)arr->data; + // shift everything forward + // arr->stride = 8 + // arr->next = 3 + // index = 0 + // + // for (i = 0; i < 16; ++i) { + // b[i] = b[i + 8] + // } + // b[00] = b[08] + // b[01] = b[09] + // ... + // b[15] = b[23] + for (i = arr->stride * index; i < arr->stride * arr->next; ++i) { buffer[i] = buffer[i + arr->stride]; } #else |
