blob: 77280f5d595e7342ee14d73074869918fcaf87bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include "UnityPrefix.h"
#include "InitializeAndCleanup.h"
enum { kMaxCount = 40 };
struct OrderedCallback
{
int order;
RegisterRuntimeInitializeAndCleanup::CallbackFunction* init;
RegisterRuntimeInitializeAndCleanup::CallbackFunction* cleanup;
};
static int gNumRegisteredCallbacks = 0;
static OrderedCallback gCallbacks[kMaxCount];
bool operator < (const OrderedCallback& lhs, const OrderedCallback& rhs)
{
return lhs.order < rhs.order;
}
RegisterRuntimeInitializeAndCleanup::RegisterRuntimeInitializeAndCleanup(CallbackFunction* Initialize, CallbackFunction* Cleanup, int order)
{
gCallbacks[gNumRegisteredCallbacks].init = Initialize;
gCallbacks[gNumRegisteredCallbacks].cleanup = Cleanup;
gCallbacks[gNumRegisteredCallbacks].order = order;
gNumRegisteredCallbacks++;
Assert(gNumRegisteredCallbacks <= kMaxCount);
}
void RegisterRuntimeInitializeAndCleanup::ExecuteInitializations()
{
std::sort (gCallbacks, gCallbacks + gNumRegisteredCallbacks);
for (int i = 0; i < gNumRegisteredCallbacks; i++)
{
if (gCallbacks[i].init)
gCallbacks[i].init ();
}
}
void RegisterRuntimeInitializeAndCleanup::ExecuteCleanup()
{
for (int i = gNumRegisteredCallbacks-1; i >=0 ; i--)
{
if (gCallbacks[i].cleanup)
gCallbacks[i].cleanup ();
}
}
|