#define HOOK(hookName, source, ...) \ { \ try { \ auto aggregator = source->GetScriptIterator(); \ while (aggregator.HasNext()) { \ auto next = aggregator.GetNext(); \ try { \ next->hookName(__VA_ARGS__); \ } catch (const std::exception& e) { \ THROW("Exception running script hook '" #hookName "': " << e.what()) \ } \ } \ } catch (const ArbUt::Exception& e) { \ throw e; \ } catch (const std::exception& e) { \ THROW("Exception setting up script hook '" #hookName "': " << e.what()) \ } \ }