Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef XDISPATCH_QUEUE_H_
00024 #define XDISPATCH_QUEUE_H_
00025
00031 #ifndef __XDISPATCH_INDIRECT__
00032 #error "Please #include <xdispatch/dispatch.h> instead of this file directly."
00033 #endif
00034
00035 #include <iostream>
00036
00037 __XDISPATCH_BEGIN_NAMESPACE
00038
00050 class XDISPATCH_EXPORT queue : public object {
00051
00052 public:
00057 queue(dispatch_queue_t);
00062 queue(const char* label);
00063 queue(const std::string&);
00064 queue(const queue&);
00065 ~queue();
00066
00077 void async(operation*);
00078 #if XDISPATCH_HAS_BLOCKS
00079
00085 inline void async(dispatch_block_t b) {
00086 async( new block_operation(b) );
00087 }
00088 #endif
00089 #if XDISPATCH_HAS_FUNCTION
00090
00096 inline void async(const lambda_function& b) {
00097 async( new function_operation(b) );
00098 }
00099 #endif
00100
00112 void apply(iteration_operation*, size_t times);
00113 #if XDISPATCH_HAS_BLOCKS
00114
00122 inline void apply(dispatch_iteration_block_t b, size_t times) {
00123 apply( new block_iteration_operation(b), times );
00124 }
00125 #endif
00126 #if XDISPATCH_HAS_FUNCTION
00127
00135 inline void apply(const iteration_lambda_function& b, size_t times) {
00136 apply( new function_iteration_operation(b), times );
00137 }
00138 #endif
00139
00150 void after(operation*, struct tm* time);
00151 void after(operation*, dispatch_time_t time);
00152 #if XDISPATCH_HAS_BLOCKS
00153
00158 inline void after(dispatch_block_t b, struct tm* time) {
00159 after( new block_operation(b), time );
00160 }
00161 inline void after(dispatch_block_t b, dispatch_time_t time) {
00162 after( new block_operation(b), time );
00163 }
00164 #endif
00165 #if XDISPATCH_HAS_FUNCTION
00166
00171 inline void after(const lambda_function& b, struct tm* time) {
00172 after( new function_operation(b), time );
00173 }
00174 inline void after(const lambda_function& b, dispatch_time_t time) {
00175 after( new function_operation(b), time );
00176 }
00177 #endif
00178
00186 void sync(operation*);
00187 #if XDISPATCH_HAS_BLOCKS
00188
00193 inline void sync(dispatch_block_t b) {
00194 sync( new block_operation(b) );
00195 }
00196 #endif
00197 #if XDISPATCH_HAS_FUNCTION
00198
00203 inline void sync(const lambda_function& b) {
00204 sync( new function_operation(b) );
00205 }
00206 #endif
00207
00220 void finalizer(operation*, const queue& = global_queue());
00221 #if XDISPATCH_HAS_BLOCKS
00222
00227 inline void finalizer(dispatch_block_t b, const queue& q = global_queue()) {
00228 finalizer( new block_operation(b), q );
00229 }
00230 #endif
00231 #if XDISPATCH_HAS_FUNCTION
00232
00237 inline void finalizer(const lambda_function& b, const queue& q = global_queue()) {
00238 finalizer( new function_operation(b), q );
00239 }
00240 #endif
00241
00244 const std::string& label() const;
00251 virtual dispatch_object_t native() const;
00258 virtual dispatch_queue_t native_queue() const;
00259
00260 queue& operator= (const queue&);
00261
00262 private:
00263 class data;
00264 pointer<data>::unique d;
00265
00266 };
00267
00268 XDISPATCH_EXPORT std::ostream& operator<<(std::ostream&, const queue*);
00269 XDISPATCH_EXPORT std::ostream& operator<<(std::ostream&, const queue&);
00270
00271 __XDISPATCH_END_NAMESPACE
00272
00275 #endif