| 61 | | void mt_foreach(T)(T[] array, void delegate(T) dg) { mt_foreach(array, (int i, T foo) { dg(foo); }); } |
|---|
| 62 | | void mt_foreach(T)(T[] array, void delegate(int, T) dg) { |
|---|
| 63 | | int left = array.length; |
|---|
| 64 | | auto sync = new Object; |
|---|
| 65 | | foreach (i, entry; array) addTask(stuple(i, entry) /apply/ (int i, T foo) { dg(i, foo); synchronized(sync) left--; }); |
|---|
| | 61 | void mt_foreach(T, C)(T iterable, C callable) { |
|---|
| | 62 | int left; auto sync = new Object; |
|---|
| | 63 | static if (is(typeof({ foreach (i, entry; array) callable(i, entry); }))) { |
|---|
| | 64 | foreach (i, entry; array) { |
|---|
| | 65 | synchronized(sync) left ++; |
|---|
| | 66 | addTask(stuple(i, entry) /apply/ (typeof(i) i, typeof(entry) entry) { |
|---|
| | 67 | callable(i, entry); |
|---|
| | 68 | synchronized(sync) left --; |
|---|
| | 69 | }); |
|---|
| | 70 | } |
|---|
| | 71 | } else static if (is(typeof({ foreach (entry; array) callable(entry); }))) { |
|---|
| | 72 | foreach (entry; array) { |
|---|
| | 73 | synchronized(sync) left ++; |
|---|
| | 74 | addTask(entry /apply/ (typeof(entry) entry) { |
|---|
| | 75 | callable(entry); |
|---|
| | 76 | synchronized(sync) left --; |
|---|
| | 77 | }); |
|---|
| | 78 | } |
|---|
| | 79 | } |
|---|