From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Utilities/InitializeAndCleanup.cpp | 51 ++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Runtime/Utilities/InitializeAndCleanup.cpp (limited to 'Runtime/Utilities/InitializeAndCleanup.cpp') diff --git a/Runtime/Utilities/InitializeAndCleanup.cpp b/Runtime/Utilities/InitializeAndCleanup.cpp new file mode 100644 index 0000000..77280f5 --- /dev/null +++ b/Runtime/Utilities/InitializeAndCleanup.cpp @@ -0,0 +1,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 (); + } +} + -- cgit v1.1-26-g67d0