2 * Copyright 2006 Timo Hirvonen
12 struct list_head node
;
13 struct track_info
*info
;
15 unsigned int marked
: 1;
24 struct shuffle_track
{
25 struct simple_track simple_track
;
26 struct list_head node
;
29 static inline struct track_info
*shuffle_track_info(const struct shuffle_track
*track
)
31 return ((struct simple_track
*)track
)->info
;
34 static inline struct simple_track
*to_simple_track(const struct list_head
*item
)
36 return container_of(item
, struct simple_track
, node
);
39 static inline struct shuffle_track
*to_shuffle_track(const struct list_head
*item
)
41 return container_of(item
, struct shuffle_track
, node
);
44 static inline struct simple_track
*iter_to_simple_track(const struct iter
*iter
)
49 /* NOTE: does not ref ti */
50 void simple_track_init(struct simple_track
*track
, struct track_info
*ti
);
53 struct simple_track
*simple_track_new(struct track_info
*ti
);
55 int simple_track_get_prev(struct iter
*);
56 int simple_track_get_next(struct iter
*);
59 int simple_track_search_get_current(void *data
, struct iter
*iter
);
60 int simple_track_search_matches(void *data
, struct iter
*iter
, const char *text
);
62 struct shuffle_track
*shuffle_list_get_next(struct list_head
*head
, struct shuffle_track
*cur
,
63 int (*filter
)(const struct simple_track
*));
65 struct shuffle_track
*shuffle_list_get_prev(struct list_head
*head
, struct shuffle_track
*cur
,
66 int (*filter
)(const struct simple_track
*));
68 struct simple_track
*simple_list_get_next(struct list_head
*head
, struct simple_track
*cur
,
69 int (*filter
)(const struct simple_track
*));
71 struct simple_track
*simple_list_get_prev(struct list_head
*head
, struct simple_track
*cur
,
72 int (*filter
)(const struct simple_track
*));
74 int simple_track_cmp(const struct list_head
*a_head
, const struct list_head
*b_head
, const char * const *keys
);
75 void sorted_list_add_track(struct list_head
*head
, struct simple_track
*track
, const char * const *keys
);
77 void shuffle_list_add_track(struct list_head
*head
, struct list_head
*node
, int nr
);
78 void reshuffle(struct list_head
*head
);
80 int simple_list_for_each_marked(struct list_head
*head
,
81 int (*cb
)(void *data
, struct track_info
*ti
), void *data
, int reverse
);