myMPD
Internal API documentation
Loading...
Searching...
No Matches
sort.c File Reference

Linked list implementation. More...

#include "src/lib/list/sort.h"
#include "dist/sds/sds.h"
#include "src/lib/list/list.h"
#include "src/lib/mem.h"
#include "src/lib/utf8_wrapper.h"
Include dependency graph for sort.c:

Data Structures

struct  t_merge_result

Functions

static bool sort_cb_value_i (struct t_list_node *first, struct t_list_node *second, enum list_sort_direction direction)
static bool sort_cb_value_p (struct t_list_node *first, struct t_list_node *second, enum list_sort_direction direction)
static bool sort_cb_key (struct t_list_node *first, struct t_list_node *second, enum list_sort_direction direction)
static void merge (struct t_list_node *first, struct t_list_node *first_end, struct t_list_node *second, struct t_list_node *second_end, enum list_sort_direction direction, list_sort_callback sort_cb, struct t_merge_result *result)
bool list_sort_by_callback (struct t_list *l, enum list_sort_direction direction, list_sort_callback sort_cb)
bool list_sort_by_value_i (struct t_list *l, enum list_sort_direction direction)
bool list_sort_by_value_p (struct t_list *l, enum list_sort_direction direction)
bool list_sort_by_key (struct t_list *l, enum list_sort_direction direction)

Detailed Description

Linked list implementation.

Function Documentation

◆ list_sort_by_callback()

bool list_sort_by_callback ( struct t_list * l,
enum list_sort_direction direction,
list_sort_callback sort_cb )

The list sorting function. Uses bottom-up merge sort algorithm.

Parameters
lpointer to list to sort
directionsort direction
sort_cbcompare function
Returns
Always true

◆ list_sort_by_key()

bool list_sort_by_key ( struct t_list * l,
enum list_sort_direction direction )

Sorts the list by key. It uses the merge sort algorithm.

Parameters
lpointer to list to sort
directionsort direction
Returns
Always true

◆ list_sort_by_value_i()

bool list_sort_by_value_i ( struct t_list * l,
enum list_sort_direction direction )

Sorts the list by value_i. It uses the merge sort algorithm.

Parameters
lpointer to list to sort
directionsort direction
Returns
Always true

◆ list_sort_by_value_p()

bool list_sort_by_value_p ( struct t_list * l,
enum list_sort_direction direction )

Sorts the list by value_p. It uses the merge sort algorithm.

Parameters
lpointer to list to sort
directionsort direction
Returns
Always true

◆ merge()

void merge ( struct t_list_node * first,
struct t_list_node * first_end,
struct t_list_node * second,
struct t_list_node * second_end,
enum list_sort_direction direction,
list_sort_callback sort_cb,
struct t_merge_result * result )
static

Function to merge two sorted linked lists (ITERATIVE)

Parameters
firstHead pointer to first list
first_endTail pointer to first list
secondHead pointer to second list
second_endTail pointer to second list
directionSort direction
sort_cbSort callback
resultMerge result

◆ sort_cb_key()

bool sort_cb_key ( struct t_list_node * first,
struct t_list_node * second,
enum list_sort_direction direction )
static

Compare callback to sort by key

Parameters
firstfirst list node
secondsecond list node
directionsort direction
Returns
true if first is greater than second

◆ sort_cb_value_i()

bool sort_cb_value_i ( struct t_list_node * first,
struct t_list_node * second,
enum list_sort_direction direction )
static

Compare callback to sort by value_i

Parameters
firstfirst list node
secondsecond list node
directionsort direction
Returns
true if first is greater than second

◆ sort_cb_value_p()

bool sort_cb_value_p ( struct t_list_node * first,
struct t_list_node * second,
enum list_sort_direction direction )
static

Compare callback to sort by value_p

Parameters
firstfirst list node
secondsecond list node
directionsort direction
Returns
true if first is greater than second