#define HOOK(hookName, source, ...) \ { \ try { \ auto aggregator = (source)->GetScriptIterator(); \ ArbUt::BorrowedPtr next; \ while (aggregator.GetNext(next)) { \ if (next->IsSuppressed()) { \ continue; \ } \ 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()) \ } \ } #define EXECUTE_SCRIPT_FUNC(scriptWrapper, hookName, ...) \ { \ try { \ if (scriptWrapper.HasValue()) { \ if (scriptWrapper.IsSet()) { \ for (const auto& scriptIterator : scriptWrapper.GetScriptSet()->GetIterator()) { \ if (scriptIterator->IsSuppressed()) { \ continue; \ } \ scriptIterator->hookName(__VA_ARGS__); \ } \ } else { \ if (scriptWrapper.GetScript()->get()->IsSuppressed()) { \ continue; \ } \ scriptWrapper.GetScript()->get()->hookName(__VA_ARGS__); \ } \ } \ } catch (const ArbUt::Exception& e) { \ throw e; \ } catch (const std::exception& e) { \ THROW("Exception setting up script hook '" #hookName "': ", e.what()) \ } \ }