diff options
| -rw-r--r-- | kapi/include/kapi/devices/manager.hpp | 16 | ||||
| -rw-r--r-- | kernel/kapi/devices.cpp | 22 | ||||
| -rw-r--r-- | libs/kstd/include/kstd/bits/flat_map.hpp | 2 |
3 files changed, 39 insertions, 1 deletions
diff --git a/kapi/include/kapi/devices/manager.hpp b/kapi/include/kapi/devices/manager.hpp index 56cd678..7817fbc 100644 --- a/kapi/include/kapi/devices/manager.hpp +++ b/kapi/include/kapi/devices/manager.hpp @@ -5,7 +5,10 @@ #include "kapi/devices/device.hpp" +#include <kstd/memory> + #include <cstddef> +#include <string_view> namespace kapi::devices { @@ -30,6 +33,19 @@ namespace kapi::devices //! @return true if the device was unregistered successfully, false otherwise. auto unregister_device(device & device) -> bool; + //! Find a device by its major and minor numbers. + //! + //! @param major the major number of the device. + //! @param minor the minor number of the device. + //! @return a pointer to the device iff. the device was found, nullptr otherwise. + auto find_device(std::size_t major, std::size_t minor) -> kstd::observer_ptr<device>; + + //! Find a device by its name. + //! + //! @param name the name of the device. + //! @return a pointer to the device iff. the device was found, nullptr otherwise. + auto find_device(std::string_view name) -> kstd::observer_ptr<device>; + //! @} } // namespace kapi::devices diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp index c0b738e..7d35778 100644 --- a/kernel/kapi/devices.cpp +++ b/kernel/kapi/devices.cpp @@ -11,6 +11,7 @@ #include <atomic> #include <cstddef> #include <optional> +#include <string_view> #include <utility> namespace kapi::devices @@ -62,4 +63,25 @@ namespace kapi::devices return false; } + auto find_device(std::size_t major, std::size_t minor) -> kstd::observer_ptr<device> + { + if (device_tree.contains(std::pair{major, minor})) + { + return device_tree.at(std::pair{major, minor}); + } + return nullptr; + } + + auto find_device(std::string_view name) -> kstd::observer_ptr<device> + { + for (auto const & [key, value] : device_tree) + { + if (value->name() == name) + { + return value; + } + } + return nullptr; + } + } // namespace kapi::devices
\ No newline at end of file diff --git a/libs/kstd/include/kstd/bits/flat_map.hpp b/libs/kstd/include/kstd/bits/flat_map.hpp index 9455549..fe46203 100644 --- a/libs/kstd/include/kstd/bits/flat_map.hpp +++ b/libs/kstd/include/kstd/bits/flat_map.hpp @@ -45,7 +45,7 @@ namespace kstd::bits template<std::size_t Index> requires(Index >= 0 && Index <= 1) - constexpr auto get() const noexcept -> decltype(auto) + [[nodiscard]] constexpr auto get() const noexcept -> decltype(auto) { if constexpr (Index == 0) { |
