wav: Don't read incomplete frame at end of a truncated file
[cmus.git] / track.h
blob271b5ae472710d3f2270daac267e752c65c61c16
1 /*
2 * Copyright 2006 Timo Hirvonen
3 */
5 #ifndef TRACK_H
6 #define TRACK_H
8 #include "list.h"
9 #include "iter.h"
11 struct simple_track {
12 struct list_head node;
13 struct track_info *info;
15 unsigned int marked : 1;
17 /* -1.. */
18 int disc : 15;
20 /* -1.. */
21 int num : 16;
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)
46 return iter->data1;
49 /* NOTE: does not ref ti */
50 void simple_track_init(struct simple_track *track, struct track_info *ti);
52 /* refs 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 *);
58 /* data is window */
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);
83 #endif