diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-11-14 08:10:48 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-11-14 08:10:48 +0300 |
commit | 40ad1cf0b1203848508cf6389e4337eb5071edf6 (patch) | |
tree | bd46e49b9e8f9b25b414828cd1de540ddea177e7 /source/blender/blenlib/intern/listbase.c | |
parent | 212a8d9e5ae78a30ed4c35161d91eeca35eaa41f (diff) |
BLI: sync changes from 2.8
Diffstat (limited to 'source/blender/blenlib/intern/listbase.c')
-rw-r--r-- | source/blender/blenlib/intern/listbase.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index 46dcee48eda..0a6d575c7d6 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -170,6 +170,34 @@ void BLI_listbase_swaplinks(ListBase *listbase, void *vlinka, void *vlinkb) } /** + * Swaps \a vlinka and \a vlinkb from their respective lists. Assumes they are both already in their lista! + */ +void BLI_listbases_swaplinks(ListBase *listbasea, ListBase *listbaseb, void *vlinka, void *vlinkb) +{ + Link *linka = vlinka; + Link *linkb = vlinkb; + Link linkc = {NULL}; + + if (!linka || !linkb) { + return; + } + + /* Temporary link to use as placeholder of the links positions */ + BLI_insertlinkafter(listbasea, linka, &linkc); + + /* Bring linka into linkb position */ + BLI_remlink(listbasea, linka); + BLI_insertlinkafter(listbaseb, linkb, linka); + + /* Bring linkb into linka position */ + BLI_remlink(listbaseb, linkb); + BLI_insertlinkafter(listbasea, &linkc, linkb); + + /* Remove temporary link */ + BLI_remlink(listbasea, &linkc); +} + +/** * Removes the head from \a listbase and returns it. */ void *BLI_pophead(ListBase *listbase) |