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-2026 Juergen Mang <mail@jcgames.de>
4 https://github.com/jcorporation/mympd
5*/
6
10
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 struct t_list_node *prev;
28};
29
33struct t_list {
34 unsigned length;
35 struct t_list_node *head;
36 struct t_list_node *tail;
37};
38
42typedef void (*user_data_callback) (struct t_list_node *current);
43
47typedef sds (*list_node_to_line_callback) (sds buffer, struct t_list_node *current, bool newline);
48
49struct t_list *list_new(void);
50struct t_list *list_dup(struct t_list *l);
51bool list_append(struct t_list *dst, struct t_list *src);
52void list_init(struct t_list *l);
53void list_clear(struct t_list *l);
54void list_free(struct t_list *l);
55void list_free_void(void *l);
56void list_clear_user_data(struct t_list *l, user_data_callback free_cb);
57void list_free_user_data(struct t_list *l, user_data_callback free_cb);
58void list_free_cb_ignore_user_data(struct t_list_node *current);
59void list_free_cb_sds_user_data(struct t_list_node *current);
60void list_free_cb_ptr_user_data(struct t_list_node *current);
62void *list_node_free(struct t_list_node *n);
63
64bool list_push(struct t_list *l, const char *key, int64_t value_i,
65 const char *value_p, void *user_data);
66bool list_push_len(struct t_list *l, const char *key, size_t key_len, int64_t value_i,
67 const char *value_p, size_t value_len, void *user_data);
68bool list_insert(struct t_list *l, const char *key, int64_t value_i,
69 const char *value_p, void *user_data);
70
71bool list_replace(struct t_list *l, unsigned idx, const char *key, int64_t value_i,
72 const char *value_p, void *user_data);
73bool list_replace_len(struct t_list *l, unsigned idx, const char *key, size_t key_len, int64_t value_i,
74 const char *value_p, size_t value_len, void *user_data);
75bool list_replace_user_data(struct t_list *l, unsigned idx, const char *key, int64_t value_i,
76 const char *value_p, void *user_data, user_data_callback free_cb);
77bool list_replace_len_user_data(struct t_list *l, unsigned idx, const char *key, size_t key_len, int64_t value_i,
78 const char *value_p, size_t value_len, void *user_data, user_data_callback free_cb);
79
80void list_crop(struct t_list *l, unsigned length, user_data_callback free_cb);
81
82bool list_move_node(struct t_list *l, unsigned from, unsigned to);
83
84unsigned list_get_node_idx(const struct t_list *l, const char *key);
85struct t_list_node *list_get_node(const struct t_list *l, const char *key);
86struct t_list_node *list_node_at(const struct t_list *l, unsigned idx);
87struct t_list_node *list_shift_first(struct t_list *l);
88struct t_list_node *list_node_extract_at(struct t_list *l, unsigned idx);
89struct t_list_node *list_node_extract(struct t_list *l, struct t_list_node *node);
90
91bool list_remove_node(struct t_list *l, unsigned idx);
92bool list_remove_node_user_data(struct t_list *l, unsigned idx, user_data_callback free_cb);
93bool list_remove_node_by_key(struct t_list *l, const char *key);
94bool list_remove_node_by_key_user_data(struct t_list *l, const char *key, user_data_callback free_cb);
95
96bool list_write_to_disk(sds filepath, struct t_list *l, list_node_to_line_callback node_to_line_cb);
97
98#endif
void list_free_user_data(struct t_list *l, user_data_callback free_cb)
Definition list.c:141
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:463
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:440
unsigned list_get_node_idx(const struct t_list *l, const char *key)
Definition list.c:177
bool list_remove_node(struct t_list *l, unsigned idx)
Definition list.c:573
bool list_remove_node_by_key_user_data(struct t_list *l, const char *key, user_data_callback free_cb)
Definition list.c:611
bool list_move_node(struct t_list *l, unsigned from, unsigned to)
Definition list.c:296
bool list_write_to_disk(sds filepath, struct t_list *l, list_node_to_line_callback node_to_line_cb)
Definition list.c:707
void * list_node_free_user_data(struct t_list_node *n, user_data_callback free_cb)
Definition list.c:550
void list_free_void(void *l)
Definition list.c:114
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:482
struct t_list * list_dup(struct t_list *l)
Definition list.c:37
void list_clear(struct t_list *l)
Definition list.c:94
void * list_node_free(struct t_list_node *n)
Definition list.c:539
struct t_list_node * list_shift_first(struct t_list *l)
Definition list.c:637
void list_crop(struct t_list *l, unsigned length, user_data_callback free_cb)
Definition list.c:739
struct t_list_node * list_node_extract(struct t_list *l, struct t_list_node *node)
Definition list.c:665
void list_free_cb_sds_user_data(struct t_list_node *current)
Definition list.c:159
struct t_list_node * list_node_at(const struct t_list *l, unsigned idx)
Definition list.c:262
void list_free(struct t_list *l)
Definition list.c:102
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:368
bool list_remove_node_by_key(struct t_list *l, const char *key)
Definition list.c:600
bool list_append(struct t_list *dst, struct t_list *src)
Definition list.c:53
void list_clear_user_data(struct t_list *l, user_data_callback free_cb)
Definition list.c:124
struct t_list_node * list_get_node(const struct t_list *l, const char *key)
Definition list.c:220
void list_free_cb_ptr_user_data(struct t_list_node *current)
Definition list.c:167
struct t_list_node * list_node_extract_at(struct t_list *l, unsigned idx)
Definition list.c:647
void list_free_cb_ignore_user_data(struct t_list_node *current)
Definition list.c:150
void list_init(struct t_list *l)
Definition list.c:84
sds(* list_node_to_line_callback)(sds buffer, struct t_list_node *current, bool newline)
Definition list.h:47
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:503
bool list_remove_node_user_data(struct t_list *l, unsigned idx, user_data_callback free_cb)
Definition list.c:584
bool list_insert(struct t_list *l, const char *key, int64_t value_i, const char *value_p, void *user_data)
Definition list.c:404
void(* user_data_callback)(struct t_list_node *current)
Definition list.h:42
bool list_push(struct t_list *l, const char *key, int64_t value_i, const char *value_p, void *user_data)
Definition list.c:349
struct t_list * list_new(void)
Definition list.c:25
Definition list.h:21
void * user_data
custom data pointer
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
struct t_list_node * prev
pointer to previous node
Definition list.h:27
sds value_p
string value
Definition list.h:23
int64_t value_i
int64 value
Definition list.h:24
Definition list.h:33
struct t_list_node * tail
pointer to last node
Definition list.h:36
unsigned length
length of the list
Definition list.h:34
struct t_list_node * head
pointer to first node
Definition list.h:35