#define HOOK(hookName, source, ...) \ { \ auto aggregator = source->GetScriptIterator(); \ while (aggregator.HasNext()) { \ auto next = aggregator.GetNext(); \ if (next == nullptr) \ continue; \ next->hookName(__VA_ARGS__); \ } \ }