1/*
2 * Copyright 2013-2014, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold <ingo_weinhold@gmx.de>
7 */
8#ifndef JOB_QUEUE_H
9#define JOB_QUEUE_H
10
11
12#include <pthread.h>
13
14#include "Job.h"
15
16
17class JobQueue {
18public:
19			class Filter;
20
21public:
22								JobQueue();
23								~JobQueue();
24
25			status_t			Init();
26			void				Close();
27
28			bool				QueueJob(Job* job);
29									// acquires a reference, if successful
30			Job*				DequeueJob();
31									// returns a reference
32
33			void				DeleteJobs(Filter* filter);
34
35private:
36			typedef DoublyLinkedList<Job> JobList;
37
38private:
39			pthread_mutex_t		fMutex;
40			pthread_cond_t		fNewJobCondition;
41			bool				fMutexInitialized;
42			bool				fNewJobConditionInitialized;
43			JobList				fJobs;
44			bool				fClosed;
45};
46
47
48class JobQueue::Filter {
49public:
50	virtual						~Filter();
51
52	virtual	bool				FilterJob(Job* job) = 0;
53};
54
55
56#endif	// JOB_QUEUE_H
57