myMPD
Internal API documentation
Loading...
Searching...
No Matches
list.h
Go to the documentation of this file.
1/*
2 SPDX-License-Identifier: GPL-3.0-or-later
3 myMPD (c) 2018-2025 Juergen Mang <mail@jcgames.de>
4 https://github.com/jcorporation/mympd
5*/
6
11#ifndef MYMPD_LIST_H
12#define MYMPD_LIST_H
13
14#include "dist/sds/sds.h"
15
16#include <stdbool.h>
17
22 sds key;
23 sds value_p;
24 int64_t value_i;
25 void *user_data;
26 struct t_list_node *next;
27};
28
32struct t_list {
33 unsigned length;
34 struct t_list_node *head;
35 struct t_list_node *tail;
36};
37
42 LIST_SORT_ASC = 0,
43 LIST_SORT_DESC = 1
44};
45
49typedef void (*user_data_callback) (struct t_list_node *current);
50
54typedef sds (*list_node_to_line_callback) (sds buffer, struct t_list_node *current, bool newline);
55
59typedef bool (*list_sort_callback) (struct t_list_node *current, struct t_list_node *next, enum list_sort_direction direction);
60
61struct t_list *list_new(void);
62struct t_list *list_dup(struct t_list *l);
63bool list_append(struct t_list *dst, struct t_list *src);
64void list_init(struct t_list *l);
65void list_clear(struct t_list *l);
66void list_free(struct t_list *l);
67void list_free_void(void *l);
68void list_clear_user_data(struct t_list *l, user_data_callback free_cb);
69void list_free_user_data(struct t_list *l, user_data_callback free_cb);
70void list_free_cb_ignore_user_data(struct t_list_node *current);
71void list_free_cb_sds_user_data(struct t_list_node *current);
72void list_free_cb_ptr_user_data(struct t_list_node *current);
74void *list_node_free(struct t_list_node *n);
75
76bool list_push(struct t_list *l, const char *key, int64_t value_i,
77 const char *value_p, void *user_data);
78bool list_push_len(struct t_list *l, const char *key, size_t key_len, int64_t value_i,
79 const char *value_p, size_t value_len, void *user_data);
80bool list_insert(struct t_list *l, const char *key, int64_t value_i,
81 const char *value_p, void *user_data);
82
83bool list_replace(struct t_list *l, unsigned idx, const char *key, int64_t value_i,
84 const char *value_p, void *user_data);
85bool list_replace_len(struct t_list *l, unsigned idx, const char *key, size_t key_len, int64_t value_i,
86 const char *value_p, size_t value_len, void *user_data);
87bool list_replace_user_data(struct t_list *l, unsigned idx, const char *key, int64_t value_i,
88 const char *value_p, void *user_data, user_data_callback free_cb);
89bool list_replace_len_user_data(struct t_list *l, unsigned idx, const char *key, size_t key_len, int64_t value_i,
90 const char *value_p, size_t value_len, void *user_data, user_data_callback free_cb);
91
92void list_crop(struct t_list *l, unsigned length, user_data_callback free_cb);
93
94bool list_shuffle(struct t_list *l);
95bool list_swap_item(struct t_list_node *n1, struct t_list_node *n2);
96bool list_move_item_pos(struct t_list *l, unsigned from, unsigned to);
97
98unsigned list_get_node_idx(const struct t_list *l, const char *key);
99struct t_list_node *list_get_node(const struct t_list *l, const char *key);
100struct t_list_node *list_node_at(const struct t_list *l, unsigned idx);
101struct t_list_node *list_node_prev_at(const struct t_list *l, unsigned idx, struct t_list_node **previous);
102struct t_list_node *list_shift_first(struct t_list *l);
103struct t_list_node *list_node_extract(struct t_list *l, unsigned idx);
104
105bool list_remove_node(struct t_list *l, unsigned idx);
106bool list_remove_node_user_data(struct t_list *l, unsigned idx, user_data_callback free_cb);
107bool list_remove_node_by_key(struct t_list *l, const char *key);
108bool list_remove_node_by_key_user_data(struct t_list *l, const char *key, user_data_callback free_cb);
109
110bool list_write_to_disk(sds filepath, struct t_list *l, list_node_to_line_callback node_to_line_cb);
111
112bool list_sort_by_callback(struct t_list *l, enum list_sort_direction direction, list_sort_callback sort_cb);
113bool list_sort_by_value_i(struct t_list *l, enum list_sort_direction direction);
114bool list_sort_by_value_p(struct t_list *l, enum list_sort_direction direction);
115bool list_sort_by_key(struct t_list *l, enum list_sort_direction direction);
116
117#endif
void list_free_user_data(struct t_list *l, user_data_callback free_cb)
Definition list.c:127
bool list_shuffle(struct t_list *l)
Definition list.c:318
bool list_swap_item(struct t_list_node *n1, struct t_list_node *n2)
Definition list.c:287
bool list_sort_by_key(struct t_list *l, enum list_sort_direction direction)
Definition list.c:827
bool list_replace_len(struct t_list *l, unsigned idx, const char *key, size_t key_len, int64_t value_i, const char *value_p, size_t value_len, void *user_data)
Definition list.c:448
list_sort_direction
Definition list.h:41
bool list_sort_by_value_p(struct t_list *l, enum list_sort_direction direction)
Definition list.c:817
bool list_sort_by_callback(struct t_list *l, enum list_sort_direction direction, list_sort_callback sort_cb)
Definition list.c:777
bool list_replace(struct t_list *l, unsigned idx, const char *key, int64_t value_i, const char *value_p, void *user_data)
Definition list.c:425
unsigned list_get_node_idx(const struct t_list *l, const char *key)
Definition list.c:163
bool list_move_item_pos(struct t_list *l, unsigned from, unsigned to)
Definition list.c:235
bool list_remove_node(struct t_list *l, unsigned idx)
Definition list.c:556
bool list_remove_node_by_key_user_data(struct t_list *l, const char *key, user_data_callback free_cb)
Definition list.c:594
bool list_write_to_disk(sds filepath, struct t_list *l, list_node_to_line_callback node_to_line_cb)
Definition list.c:666
void * list_node_free_user_data(struct t_list_node *n, user_data_callback free_cb)
Definition list.c:533
void list_free_void(void *l)
Definition list.c:100
bool list_replace_user_data(struct t_list *l, unsigned idx, const char *key, int64_t value_i, const char *value_p, void *user_data, user_data_callback free_cb)
Definition list.c:467
struct t_list * list_dup(struct t_list *l)
Definition list.c:39
struct t_list_node * list_node_extract(struct t_list *l, unsigned idx)
Definition list.c:623
void list_clear(struct t_list *l)
Definition list.c:80
void * list_node_free(struct t_list_node *n)
Definition list.c:522
struct t_list_node * list_shift_first(struct t_list *l)
Definition list.c:613
void list_crop(struct t_list *l, unsigned length, user_data_callback free_cb)
Definition list.c:698
void list_free_cb_sds_user_data(struct t_list_node *current)
Definition list.c:145
struct t_list_node * list_node_at(const struct t_list *l, unsigned idx)
Definition list.c:223
void list_free(struct t_list *l)
Definition list.c:88
bool list_push_len(struct t_list *l, const char *key, size_t key_len, int64_t value_i, const char *value_p, size_t value_len, void *user_data)
Definition list.c:359
bool list_remove_node_by_key(struct t_list *l, const char *key)
Definition list.c:583
struct t_list_node * list_node_prev_at(const struct t_list *l, unsigned idx, struct t_list_node **previous)
Definition list.c:200
bool list_append(struct t_list *dst, struct t_list *src)
Definition list.c:55
void list_clear_user_data(struct t_list *l, user_data_callback free_cb)
Definition list.c:110
struct t_list_node * list_get_node(const struct t_list *l, const char *key)
Definition list.c:182
void list_free_cb_ptr_user_data(struct t_list_node *current)
Definition list.c:153
void list_free_cb_ignore_user_data(struct t_list_node *current)
Definition list.c:136
void list_init(struct t_list *l)
Definition list.c:70
sds(* list_node_to_line_callback)(sds buffer, struct t_list_node *current, bool newline)
Definition list.h:54
bool list_replace_len_user_data(struct t_list *l, unsigned idx, const char *key, size_t key_len, int64_t value_i, const char *value_p, size_t value_len, void *user_data, user_data_callback free_cb)
Definition list.c:488
bool(* list_sort_callback)(struct t_list_node *current, struct t_list_node *next, enum list_sort_direction direction)
Definition list.h:59
bool list_remove_node_user_data(struct t_list *l, unsigned idx, user_data_callback free_cb)
Definition list.c:567
bool list_sort_by_value_i(struct t_list *l, enum list_sort_direction direction)
Definition list.c:807
bool list_insert(struct t_list *l, const char *key, int64_t value_i, const char *value_p, void *user_data)
Definition list.c:393
void(* user_data_callback)(struct t_list_node *current)
Definition list.h:49
bool list_push(struct t_list *l, const char *key, int64_t value_i, const char *value_p, void *user_data)
Definition list.c:340
struct t_list * list_new(void)
Definition list.c:27
Definition list.h:21
void * user_data
custom data
Definition list.h:25
sds key
key string
Definition list.h:22
struct t_list_node * next
pointer to next node
Definition list.h:26
sds value_p
string value
Definition list.h:23
int64_t value_i
unsigned unsigned value
Definition list.h:24
Definition list.h:32
struct t_list_node * tail
pointer to last node
Definition list.h:35
unsigned length
length of the list
Definition list.h:33
struct t_list_node * head
pointer to first node
Definition list.h:34