00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __X_LIST_H__
00028 #define __X_LIST_H__
00029
00030 #include "xmmsclientpriv/xmmsclient_util.h"
00031
00032 #ifdef __cplusplus
00033 extern "C" {
00034 #endif
00035
00036 typedef struct _x_list_t x_list_t;
00037
00038 struct _x_list_t
00039 {
00040 void * data;
00041 x_list_t *next;
00042 x_list_t *prev;
00043 };
00044
00045
00046
00047 x_list_t* x_list_alloc (void);
00048 void x_list_free (x_list_t *list);
00049 void x_list_free_1 (x_list_t *list);
00050 x_list_t* x_list_append (x_list_t *list,
00051 void * data);
00052 x_list_t* x_list_prepend (x_list_t *list,
00053 void * data);
00054 x_list_t* x_list_insert (x_list_t *list,
00055 void * data,
00056 int position);
00057 x_list_t* x_list_insert_sorted (x_list_t *list,
00058 void * data,
00059 XCompareFunc func);
00060 x_list_t* x_list_insert_before (x_list_t *list,
00061 x_list_t *sibling,
00062 void * data);
00063 x_list_t* x_list_concat (x_list_t *list1,
00064 x_list_t *list2);
00065 x_list_t* x_list_remove (x_list_t *list,
00066 const void * data);
00067 x_list_t* x_list_remove_all (x_list_t *list,
00068 const void * data);
00069 x_list_t* x_list_remove_link (x_list_t *list,
00070 x_list_t *llink);
00071 x_list_t* x_list_delete_link (x_list_t *list,
00072 x_list_t *link_);
00073 x_list_t* x_list_reverse (x_list_t *list);
00074 x_list_t* x_list_copy (x_list_t *list);
00075 x_list_t* x_list_nth (x_list_t *list,
00076 unsigned int n);
00077 x_list_t* x_list_nth_prev (x_list_t *list,
00078 unsigned int n);
00079 x_list_t* x_list_find (x_list_t *list,
00080 const void * data);
00081 x_list_t* x_list_find_custom (x_list_t *list,
00082 const void * data,
00083 XCompareFunc func);
00084 int x_list_position (x_list_t *list,
00085 x_list_t *llink);
00086 int x_list_index (x_list_t *list,
00087 const void * data);
00088 x_list_t* x_list_last (x_list_t *list);
00089 x_list_t* x_list_first (x_list_t *list);
00090 unsigned int x_list_length (x_list_t *list);
00091 void x_list_foreach (x_list_t *list,
00092 XFunc func,
00093 void * user_data);
00094 void * x_list_nth_data (x_list_t *list,
00095 unsigned int n);
00096
00097 #define x_list_previous(list) ((list) ? (((x_list_t *)(list))->prev) : NULL)
00098 #define x_list_next(list) ((list) ? (((x_list_t *)(list))->next) : NULL)
00099
00100 #ifdef __cplusplus
00101 }
00102 #endif
00103
00104 #endif
00105