1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
-
-
-
+
-
+
+
-
+
-
+
-
-
+
+
-
+
+
|
#include <vector>
#import "cube.h"
#import "protos.h"
static void **queue;
static std::vector<void (^)(void)> *queue;
static size_t queueCount;
void
enqueueInit(void (^init)(void))
{
queue = realloc(queue, (queueCount + 1) * sizeof(void *));
if (queue == NULL)
queue = new std::vector<void (^)(void)>();
fatal(@"cannot allocate init queue");
queue->push_back(init);
queue[queueCount++] = (__bridge void *)init;
}
void
processInitQueue(void)
{
for (auto &init : *queue)
init();
for (size_t i = 0; i < queueCount; i++)
((__bridge void (^)())queue[i])();
queue->clear();
free(queue);
queueCount = 0;
}
|