Skip to content

Commit 8be5f2d

Browse files
committed
cleaner approach for event arg list allocation
1 parent eae94f4 commit 8be5f2d

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

Server/Components/CAPI/Impl/ComponentManager.hpp

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -141,40 +141,39 @@ class ComponentManager : public Singleton<ComponentManager>
141141
{
142142
EventArgs_Common eventArgs;
143143
constexpr std::size_t size = sizeof...(Args);
144+
Impl::DynamicArray<void*> argsList;
144145

145-
if (size > 0)
146+
if constexpr (size > 0)
146147
{
147-
eventArgs.list = new void*[size];
148+
argsList.reserve(size);
149+
(argsList.push_back(&args), ...);
148150
}
149151

150152
eventArgs.size = size;
153+
eventArgs.list = size > 0 ? argsList.data() : nullptr;
154+
155+
if (container->second.empty())
156+
{
157+
return returnHandler == EventReturnHandler::StopAtTrue ? false : true;
158+
}
159+
151160
bool result = true;
152161
for (auto cb : container->second)
153162
{
154163
if (cb)
155164
{
156-
int i = 0;
157-
([&]
158-
{
159-
eventArgs.list[i] = &args;
160-
i++;
161-
}(),
162-
...);
163-
164165
auto ret = cb(&eventArgs);
165166
switch (returnHandler)
166167
{
167168
case EventReturnHandler::StopAtFalse:
168169
if (!ret)
169170
{
170-
delete[] eventArgs.list;
171171
return false;
172172
}
173173
break;
174174
case EventReturnHandler::StopAtTrue:
175175
if (ret)
176176
{
177-
delete[] eventArgs.list;
178177
return true;
179178
}
180179
break;
@@ -186,7 +185,6 @@ class ComponentManager : public Singleton<ComponentManager>
186185
}
187186
}
188187

189-
delete[] eventArgs.list;
190188
return result;
191189
}
192190
};

0 commit comments

Comments
 (0)