apple: Redefine some additional clashing Mach types
[strongswan.git] / src / libstrongswan / processing / processor.h
1 /*
2 * Copyright (C) 2012 Tobias Brunner
3 * Copyright (C) 2005-2007 Martin Willi
4 * Copyright (C) 2005 Jan Hutter
5 * Hochschule fuer Technik Rapperswil
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * for more details.
16 */
17
18 /**
19 * @defgroup processor processor
20 * @{ @ingroup processing
21 */
22
23 #ifndef PROCESSOR_H_
24 #define PROCESSOR_H_
25
26 #include <utils/utils.h>
27
28 typedef struct processor_t processor_t;
29
30 #include <stdlib.h>
31
32 #include <library.h>
33 #include <processing/jobs/job.h>
34
35 /**
36 * The processor uses threads to process queued jobs.
37 */
38 struct processor_t {
39
40 /**
41 * Get the total number of threads used by the processor.
42 *
43 * @return size of thread pool
44 */
45 u_int (*get_total_threads) (processor_t *this);
46
47 /**
48 * Get the number of threads currently waiting for work.
49 *
50 * @return number of idle threads
51 */
52 u_int (*get_idle_threads) (processor_t *this);
53
54 /**
55 * Get the number of threads currently working, per priority class.
56 *
57 * @param priority to check
58 * @return number of threads in priority working
59 */
60 u_int (*get_working_threads)(processor_t *this, job_priority_t prio);
61
62 /**
63 * Get the number of queued jobs for a specified priority.
64 *
65 * @param prio priority class to get job load for
66 * @return number of items in queue
67 */
68 u_int (*get_job_load) (processor_t *this, job_priority_t prio);
69
70 /**
71 * Adds a job to the queue.
72 *
73 * This function is non blocking and adds a job_t to the queue.
74 *
75 * @param job job to add to the queue
76 */
77 void (*queue_job) (processor_t *this, job_t *job);
78
79 /**
80 * Directly execute a job with an idle worker thread.
81 *
82 * If no idle thread is available, the job gets executed by the calling
83 * thread.
84 *
85 * @param job job, gets destroyed
86 */
87 void (*execute_job)(processor_t *this, job_t *job);
88
89 /**
90 * Set the number of threads to use in the processor.
91 *
92 * If the number of threads is smaller than number of currently running
93 * threads, thread count is decreased. Use 0 to disable the processor.
94 *
95 * This call does not block and wait for threads to terminate if the number
96 * of threads is reduced. Instead use cancel() for that during shutdown.
97 *
98 * @param count number of threads to allocate
99 */
100 void (*set_threads)(processor_t *this, u_int count);
101
102 /**
103 * Sets the number of threads to 0 and cancels all blocking jobs, then waits
104 * for all threads to be terminated.
105 */
106 void (*cancel)(processor_t *this);
107
108 /**
109 * Destroy a processor object.
110 */
111 void (*destroy) (processor_t *processor);
112 };
113
114 /**
115 * Create the thread pool without any threads.
116 *
117 * Use the set_threads method to start processing jobs.
118 *
119 * @return processor_t object
120 */
121 processor_t *processor_create();
122
123 #endif /** PROCESSOR_H_ @}*/