From 2ca67de9609e297ed608469fd6a0d3a9dd9cad2f Mon Sep 17 00:00:00 2001 From: Antonioya Date: Sat, 29 Sep 2018 16:39:45 +0200 Subject: A new function to move list at the beginning of another list This is a change of the BLI_movelisttolist but in reverse order. --- source/blender/blenlib/BLI_listbase.h | 1 + source/blender/blenlib/intern/listbase.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) (limited to 'source/blender/blenlib') diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h index c4ad5acfe4b..34e7a1fa212 100644 --- a/source/blender/blenlib/BLI_listbase.h +++ b/source/blender/blenlib/BLI_listbase.h @@ -82,6 +82,7 @@ void BLI_listbase_swaplinks(struct ListBase *listbase, void *vlinka, void *vlink void BLI_listbases_swaplinks(struct ListBase *listbasea, struct ListBase *listbaseb, void *vlinka, void *vlinkb) ATTR_NONNULL(2, 3); void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1, 2); +void BLI_movelisttolist_reverse(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1, 2); void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1, 2); void BLI_listbase_reverse(struct ListBase *lb) ATTR_NONNULL(1); void BLI_listbase_rotate_first(struct ListBase *lb, void *vlink) ATTR_NONNULL(1, 2); diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index 80b8a8d041c..da187fbd19d 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -67,6 +67,26 @@ void BLI_movelisttolist(ListBase *dst, ListBase *src) src->first = src->last = NULL; } +/** + * moves the entire contents of \a src at the begining of \a dst. + */ +void BLI_movelisttolist_reverse(ListBase *dst, ListBase *src) +{ + if (src->first == NULL) return; + + if (dst->first == NULL) { + dst->first = src->first; + dst->last = src->last; + } + else { + ((Link *)src->last)->next = dst->first; + ((Link *)dst->first)->prev = src->last; + dst->first = src->first; + } + + src->first = src->last = NULL; +} + /** * Prepends \a vlink (assumed to begin with a Link) onto listbase. */ -- cgit v1.2.3