diff --git a/core/queue.c b/core/queue.c index ac45ce92..39ed4672 100644 --- a/core/queue.c +++ b/core/queue.c @@ -257,6 +257,18 @@ void queue_erase(struct queue *queue, unsigned int index) __queue_remove(queue, &it); } +void queue_erase_track(struct queue *queue, struct track *track) +{ + struct queue_iter it; + + queue_for_each(queue, &it) { + if (queue_iter_val(&it) == track) { + queue_erase(queue, it.it_pos); + return; + } + } +} + void queue_remove(struct queue *queue, unsigned int index) { struct queue_iter it; diff --git a/include/core/queue.h b/include/core/queue.h index ba77e63f..c2b5e789 100644 --- a/include/core/queue.h +++ b/include/core/queue.h @@ -165,6 +165,9 @@ unsigned int queue_add(struct queue *, struct track *); */ void queue_erase(struct queue *, unsigned int); +/* Called to erase a track from the queue */ +void queue_erase_track(struct queue *, struct track *); + /* Called to remove a track from the queue by index. */ void queue_remove(struct queue *, unsigned int);