44 _operations = [[CPArray alloc] init];
49 selector:@selector(_runNextOpsInQueue)
56 - (void)_runNextOpsInQueue
58 if (!_suspended && [
self operationCount] > 0)
61 count = [_operations count];
63 for (; i < count; i++)
65 var op = [_operations objectAtIndex:i];
66 if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting])
74 - (void)_enableTimer:(BOOL)enable
90 selector:@selector(_runNextOpsInQueue)
103 [
self willChangeValueForKey:@"operations"];
104 [
self willChangeValueForKey:@"operationCount"];
105 [_operations addObject:anOperation];
106 [
self _sortOpsByPriority:_operations];
107 [
self didChangeValueForKey:@"operations"];
108 [
self didChangeValueForKey:@"operationCount"];
116 - (void)addOperations:(CPArray)ops waitUntilFinished:(BOOL)wait
122 [
self _sortOpsByPriority:ops];
123 [
self _runOpsSynchronously:ops];
126 [_operations addObjectsFromArray:ops];
127 [
self _sortOpsByPriority:_operations];
135 - (void)addOperationWithFunction:(JSObject)aFunction
140 - (CPArray)operations
145 - (int)operationCount
149 return [_operations count];
158 - (void)cancelAllOperations
163 count = [_operations count];
165 for (; i < count; i++)
167 [[_operations objectAtIndex:i] cancel];
175 - (void)waitUntilAllOperationsAreFinished
178 [
self _enableTimer:NO];
179 [
self _runOpsSynchronously:_operations];
182 [
self _enableTimer:YES];
191 - (int)maxConcurrentOperationCount
200 - (void)setSuspended:(BOOL)suspend
202 _suspended = suspend;
203 [
self _enableTimer:!suspend];
214 - (void)_sortOpsByPriority:(CPArray)someOps
218 [someOps sortUsingFunction:function(lhs, rhs)
220 if ([lhs queuePriority] < [rhs queuePriority])
226 if ([lhs queuePriority] > [rhs queuePriority])
240 - (void)_runOpsSynchronously:(CPArray)ops
253 for (; i < count; i++)
255 var op = [ops objectAtIndex:i];
256 if ([op isReady] && ![op isCancelled] && ![op isFinished] && ![op isExecuting])
263 for (i = 0; i < count; i++)
265 var op = [ops objectAtIndex:i];
266 if (![op isFinished] && ![op isCancelled])
283 [cpOperationMainQueue setName:@"main"];