X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fplist.c;h=699db2c6dbc7b454cae187624fec109887a09412;hp=38cde5b435c3d1b7e6d16ff844ca4b180c735482;hb=f24325648c601d4b0835074f271072f4832e4478;hpb=c9384515a81cb64d345b299908b2852f51bb8e6e diff --git a/src/plist.c b/src/plist.c index 38cde5b..699db2c 100644 --- a/src/plist.c +++ b/src/plist.c @@ -42,6 +42,7 @@ struct psi_plist { memcpy(dest, src, list->size); \ } \ } while (0) +#define PLIST_CPY_R(list, dest, src, num) memcpy((dest), (src), (num) * (list)->size) /* !!! adjust list->count prior reduction */ #define PLIST_MOV_REDUCE(l, i) PLIST_MOV_REDUCE_EX(l, i, 1) #define PLIST_MOV_REDUCE_EX(l, i, n) memmove(PLIST_ELE(l, i), PLIST_ELE(l, (i) + (n)), (l)->size * ((l)->count - (i))) @@ -139,6 +140,14 @@ bool psi_plist_get(struct psi_plist *list, size_t index, void *ptr) { return false; } +bool psi_plist_unset(struct psi_plist *list, size_t index) { + if (list && list->count > index) { + memset(PLIST_ELE(list, index), 0, list->size); + return true; + } + return false; +} + bool psi_plist_del(struct psi_plist *list, size_t index, void *ptr) { if (list && list->count > index) { if (ptr) { @@ -204,9 +213,7 @@ struct psi_plist *psi_plist_ins_r(struct psi_plist *list, size_t offset_start, s size_t e; PLIST_MOV_EXPAND_EX(list, offset_start, num_eles); - for (e = 0; e < num_eles; ++e) { - PLIST_CPY(list, PLIST_ELE(list, offset_start + e), &eles[e]); - } + PLIST_CPY_R(list, PLIST_ELE(list, offset_start), eles, num_eles); list->count = new_count; } }