ObjFW  Diff

Differences From Artifact [1b7b5d2a56]:

To Artifact [ba662533a2]:


29
30
31
32
33
34
35
36
37
38



39
40

41
42
43
44
45
46
47
48
49
50
51
52
53
54



55
56
57
58
59
60
61
62

63
64
65
66
67
68
69
29
30
31
32
33
34
35



36
37
38
39

40
41
42
43
44
45
46
47
48
49
50
51



52
53
54
55
56
57
58
59
60
61

62
63
64
65
66
67
68
69







-
-
-
+
+
+

-
+











-
-
-
+
+
+







-
+







	SEL selector;
	id object;
#ifdef OF_HAVE_BLOCKS
	of_thread_pool_block_t block;
#endif
}

+ jobWithTarget: (id)target
       selector: (SEL)selector
	 object: (id)object;
+ (instancetype)jobWithTarget: (id)target
		     selector: (SEL)selector
		       object: (id)object;
#ifdef OF_HAVE_BLOCKS
+ jobWithBlock: (of_thread_pool_block_t)block;
+ (instancetype)jobWithBlock: (of_thread_pool_block_t)block;
#endif
- initWithTarget: (id)target
	selector: (SEL)selector
	  object: (id)object;
#ifdef OF_HAVE_BLOCKS
- initWithBlock: (of_thread_pool_block_t)block;
#endif
- (void)perform;
@end

@implementation OFThreadPoolJob
+ jobWithTarget: (id)target
       selector: (SEL)selector
	 object: (id)object
+ (instancetype)jobWithTarget: (id)target
		     selector: (SEL)selector
		       object: (id)object
{
	return [[[self alloc] initWithTarget: target
				    selector: selector
				      object: object] autorelease];
}

#ifdef OF_HAVE_BLOCKS
+ jobWithBlock: (of_thread_pool_block_t)block
+ (instancetype)jobWithBlock: (of_thread_pool_block_t)block
{
	return [[(OFThreadPoolJob*)[self alloc]
	    initWithBlock: block] autorelease];
}
#endif

- initWithTarget: (id)target_
128
129
130
131
132
133
134
135

136
137
138
139
140

141
142
143
144
145
146
147
128
129
130
131
132
133
134

135
136
137
138
139

140
141
142
143
144
145
146
147







-
+




-
+







	OFList *queue;
	OFCondition *queueCondition, *countCondition;
@public
	volatile BOOL terminate;
	volatile int *doneCount;
}

+ threadWithThreadPool: (OFThreadPool*)threadPool;
+ (instancetype)threadWithThreadPool: (OFThreadPool*)threadPool;
- initWithThreadPool: (OFThreadPool*)threadPool;
@end

@implementation OFThreadPoolThread
+ threadWithThreadPool: (OFThreadPool*)threadPool
+ (instancetype)threadWithThreadPool: (OFThreadPool*)threadPool
{
	return [[[self alloc] initWithThreadPool: threadPool] autorelease];
}

- initWithThreadPool: (OFThreadPool*)threadPool
{
	self = [super init];
237
238
239
240
241
242
243
244

245
246
247
248
249

250
251
252
253
254
255
256
237
238
239
240
241
242
243

244
245
246
247
248

249
250
251
252
253
254
255
256







-
+




-
+







			[countCondition unlock];
		}
	}
}
@end

@implementation OFThreadPool
+ threadPool
+ (instancetype)threadPool
{
	return [[[self alloc] init] autorelease];
}

+ threadPoolWithSize: (size_t)size
+ (instancetype)threadPoolWithSize: (size_t)size
{
	return [[[self alloc] initWithSize: size] autorelease];
}

- init
{
	return [self initWithSize: of_num_cpus];