aboutsummaryrefslogtreecommitdiff
path: root/modules/monitor.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2026-03-27 13:10:26 +0000
committerGravatar Sadie Powell2026-03-27 13:10:26 +0000
commitcbdcd051c63c4ff98dfb4ff45388e722f8d0a2de (patch)
treef2c61a977edce634fc28b9dead3d8bfa5782211c /modules/monitor.cpp
parentMove CUList to be declared inside User. (diff)
Switch the extensible system to using shared pointers.
Diffstat (limited to 'modules/monitor.cpp')
-rw-r--r--modules/monitor.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/modules/monitor.cpp b/modules/monitor.cpp
index 5255c79b2..9c14db837 100644
--- a/modules/monitor.cpp
+++ b/modules/monitor.cpp
@@ -74,24 +74,27 @@ class IRCv3::Monitor::Manager final
ExtData* Get(User* user, bool create = false)
{
- ExtData* extdata = static_cast<ExtData*>(GetRaw(user));
- if ((!extdata) && (create))
+ auto* extdata = GetRaw(user);
+ if (!extdata)
{
- extdata = new ExtData;
- SetRaw(user, extdata);
+ if (!create)
+ return nullptr;
+
+ SetRaw(user, std::make_shared<ExtData>());
+ extdata = GetRaw(user);
}
- return extdata;
+ return std::static_pointer_cast<ExtData>(*extdata).get();
}
void Unset(User* user)
{
- Delete(user, UnsetRaw(user));
+ OnDelete(user, UnsetRaw(user));
}
- std::string ToInternal(const Extensible* container, void* item) const noexcept override
+ std::string ToInternal(const Extensible* container, const ExtensionPtr& item) const noexcept override
{
std::string ret;
- const ExtData* extdata = static_cast<ExtData*>(item);
+ const auto& extdata = std::static_pointer_cast<ExtData>(item);
for (const auto* entry : extdata->list)
ret.append(entry->GetNick()).push_back(' ');
if (!ret.empty())
@@ -100,11 +103,6 @@ class IRCv3::Monitor::Manager final
}
void FromInternal(Extensible* container, const std::string& value) noexcept override;
-
- void Delete(Extensible* container, void* item) override
- {
- delete static_cast<ExtData*>(item);
- }
};
public: