[notifier] update to use Callback<HandlerType> (#8611)

This commit updates `Notifier` class to use the recently added
`Callback<HandlerType>` for the external callbacks.
This commit is contained in:
Abtin Keshavarzian
2023-01-03 20:42:37 -08:00
committed by GitHub
parent beb8a9040b
commit e7493499ee
3 changed files with 26 additions and 25 deletions
+9 -20
View File
@@ -50,8 +50,7 @@ Notifier::Notifier(Instance &aInstance)
{
for (ExternalCallback &callback : mExternalCallbacks)
{
callback.mHandler = nullptr;
callback.mContext = nullptr;
callback.Clear();
}
}
@@ -64,23 +63,17 @@ Error Notifier::RegisterCallback(otStateChangedCallback aCallback, void *aContex
for (ExternalCallback &callback : mExternalCallbacks)
{
if (callback.mHandler == nullptr)
VerifyOrExit(!callback.Matches(aCallback, aContext), error = kErrorAlready);
if (!callback.IsSet() && (unusedCallback == nullptr))
{
if (unusedCallback == nullptr)
{
unusedCallback = &callback;
}
continue;
unusedCallback = &callback;
}
VerifyOrExit((callback.mHandler != aCallback) || (callback.mContext != aContext), error = kErrorAlready);
}
VerifyOrExit(unusedCallback != nullptr, error = kErrorNoBufs);
unusedCallback->mHandler = aCallback;
unusedCallback->mContext = aContext;
unusedCallback->Set(aCallback, aContext);
exit:
return error;
@@ -92,10 +85,9 @@ void Notifier::RemoveCallback(otStateChangedCallback aCallback, void *aContext)
for (ExternalCallback &callback : mExternalCallbacks)
{
if ((callback.mHandler == aCallback) && (callback.mContext == aContext))
if (callback.Matches(aCallback, aContext))
{
callback.mHandler = nullptr;
callback.mContext = nullptr;
callback.Clear();
}
}
@@ -199,10 +191,7 @@ void Notifier::EmitEvents(void)
for (ExternalCallback &callback : mExternalCallbacks)
{
if (callback.mHandler != nullptr)
{
callback.mHandler(events.GetAsFlags(), callback.mContext);
}
callback.InvokeIfSet(events.GetAsFlags());
}
exit: