From 14ec8e92b45a2eae5bdb3d459cee9633ea129359 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 10 Sep 2026 14:33:19 +0200 Subject: kstd/memory: introduce observer_ptr casts --- kapi/kapi/acpi.hpp | 2 +- kapi/kapi/devices/device.hpp | 4 ++-- kapi/kapi/devices/driver.hpp | 12 +++++++++--- kapi/kapi/devices/facet_registry.hpp | 8 ++++---- 4 files changed, 16 insertions(+), 10 deletions(-) (limited to 'kapi') diff --git a/kapi/kapi/acpi.hpp b/kapi/kapi/acpi.hpp index eb82c781..49806433 100644 --- a/kapi/kapi/acpi.hpp +++ b/kapi/kapi/acpi.hpp @@ -32,7 +32,7 @@ namespace kapi::acpi template auto get_table() -> kstd::observer_ptr<::acpi::table_type_t const> { - return kstd::make_observer(static_cast<::acpi::table_type_t const *>(get_table(Signature).get())); + return static_pointer_cast<::acpi::table_type_t const>(get_table(Signature)); } } // namespace kapi::acpi diff --git a/kapi/kapi/devices/device.hpp b/kapi/kapi/devices/device.hpp index c3a33daf..6b2288e5 100644 --- a/kapi/kapi/devices/device.hpp +++ b/kapi/kapi/devices/device.hpp @@ -71,7 +71,7 @@ namespace kapi::devices template [[nodiscard]] auto facet() -> kstd::observer_ptr { - return kstd::observer_ptr{static_cast(facet(FacetType::id).get())}; + return static_pointer_cast(facet(FacetType::id)); } //! Get a specific facet of this device, if it supports it. @@ -81,7 +81,7 @@ namespace kapi::devices template [[nodiscard]] auto facet() const noexcept -> kstd::observer_ptr { - return kstd::observer_ptr{static_cast(facet(FacetType::id).get())}; + return static_pointer_cast(facet(FacetType::id)); } //! Check if this device has a specific facet. diff --git a/kapi/kapi/devices/driver.hpp b/kapi/kapi/devices/driver.hpp index 8c4d5e97..e789b19a 100644 --- a/kapi/kapi/devices/driver.hpp +++ b/kapi/kapi/devices/driver.hpp @@ -69,7 +69,7 @@ namespace kapi::devices template [[nodiscard]] auto facet() -> kstd::observer_ptr { - return kstd::observer_ptr{static_cast(query_facet(FacetType::id))}; + return static_pointer_cast(query_facet(FacetType::id)); } //! Retrieve this drivers implementation of a given capability facet. @@ -79,8 +79,7 @@ namespace kapi::devices template [[nodiscard]] auto facet() const -> kstd::observer_ptr { - return kstd::observer_ptr{ - static_cast(const_cast(this)->query_facet(FacetType::id).get())}; + return static_pointer_cast(query_facet(FacetType::id)); } //! Check if this driver implements a given capability facet. @@ -110,6 +109,13 @@ namespace kapi::devices protected: //! Return a pointer to the implementation of the given facet if this driver supports it. virtual auto query_facet(kapi::capabilities::facet_id facet) -> kstd::observer_ptr; + + private: + //! Return a pointer to the implementation of the given facet if this driver supports it. + [[nodiscard]] auto query_facet(kapi::capabilities::facet_id facet) const -> kstd::observer_ptr + { + return const_cast(this)->query_facet(facet); + } }; //! @} diff --git a/kapi/kapi/devices/facet_registry.hpp b/kapi/kapi/devices/facet_registry.hpp index 5e0367c1..4fa6186a 100644 --- a/kapi/kapi/devices/facet_registry.hpp +++ b/kapi/kapi/devices/facet_registry.hpp @@ -99,7 +99,7 @@ namespace kapi::devices { if (m_id == FacetType::id) { - return kstd::observer_ptr{static_cast(untyped_facet().get())}; + return static_pointer_cast(untyped_facet()); } return nullptr; } @@ -112,7 +112,7 @@ namespace kapi::devices { if (m_id == FacetType::id) { - return kstd::observer_ptr{static_cast(untyped_facet().get())}; + return static_pointer_cast(untyped_facet()); } return nullptr; } @@ -213,7 +213,7 @@ namespace kapi::devices template [[nodiscard]] auto resolve(std::string_view name) -> kstd::observer_ptr { - return kstd::observer_ptr{static_cast(resolve(FacetType::id, name).get())}; + return static_pointer_cast(resolve(FacetType::id, name)); } //! Attempt to resolve a facet for a device. @@ -223,7 +223,7 @@ namespace kapi::devices template [[nodiscard]] auto resolve(device & device) -> kstd::observer_ptr { - return kstd::observer_ptr{static_cast(resolve(FacetType::id, device).get())}; + return static_pointer_cast(resolve(FacetType::id, device)); } //! Subscribe to facet publish/withdraw notifications. -- cgit v1.2.3