mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 10:51:54 -04:00
36 lines
691 B
C
36 lines
691 B
C
// SPDX-License-Identifier: BSD-2-Clause
|
|
// Copyright (C) 2010 Andrea Mazzoleni
|
|
|
|
#include "tommylist.h"
|
|
#include "tommychain.h"
|
|
|
|
/** \internal
|
|
* Setup a list.
|
|
*/
|
|
tommy_inline void tommy_list_set(tommy_list* list, tommy_node* head, tommy_node* tail)
|
|
{
|
|
head->prev = tail;
|
|
tail->next = 0;
|
|
*list = head;
|
|
}
|
|
|
|
TOMMY_API void tommy_list_sort(tommy_list* list, tommy_compare_func* cmp)
|
|
{
|
|
tommy_chain chain;
|
|
tommy_node* head;
|
|
|
|
if (tommy_list_empty(list))
|
|
return;
|
|
|
|
head = tommy_list_head(list);
|
|
|
|
/* create a chain from the list */
|
|
chain.head = head;
|
|
chain.tail = head->prev;
|
|
|
|
tommy_chain_mergesort(&chain, cmp);
|
|
|
|
/* restore the list */
|
|
tommy_list_set(list, chain.head, chain.tail);
|
|
}
|
|
|