diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-19 17:54:35 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-19 18:32:27 +0200 |
| commit | 399f38f2ae6481aee9d7b7a3a7ad436b127dd0bd (patch) | |
| tree | be441e8a0aa0d1a16bd0293c83b1035b8f63df2c | |
| parent | 2e4c3f334e2b7fd0853d0e30138b120964f0c06d (diff) | |
| download | kernel-399f38f2ae6481aee9d7b7a3a7ad436b127dd0bd.tar.xz kernel-399f38f2ae6481aee9d7b7a3a7ad436b127dd0bd.zip | |
kstd: move bitfiled_enum header
| -rw-r--r-- | arch/x86_64/arch/cpu/control_register.hpp | 8 | ||||
| -rw-r--r-- | arch/x86_64/arch/cpu/model_specific_register.hpp | 8 | ||||
| -rw-r--r-- | arch/x86_64/arch/memory/page_table.hpp | 8 | ||||
| -rw-r--r-- | kapi/kapi/memory/page_mapper.hpp | 6 | ||||
| -rw-r--r-- | libs/acpi/acpi/data/madt.hpp | 4 | ||||
| -rw-r--r-- | libs/kstd/kstd.dox | 7 | ||||
| -rw-r--r-- | libs/kstd/kstd/bitfield_enum.hpp (renamed from libs/kstd/kstd/ext/bitfield_enum.hpp) | 29 |
7 files changed, 33 insertions, 37 deletions
diff --git a/arch/x86_64/arch/cpu/control_register.hpp b/arch/x86_64/arch/cpu/control_register.hpp index ad307081..127d1e24 100644 --- a/arch/x86_64/arch/cpu/control_register.hpp +++ b/arch/x86_64/arch/cpu/control_register.hpp @@ -5,7 +5,7 @@ #include <kapi/memory.hpp> -#include <kstd/ext/bitfield_enum.hpp> +#include <kstd/bitfield_enum.hpp> #include <cstdint> #include <string_view> @@ -60,7 +60,7 @@ namespace arch::cpu }; } // namespace arch::cpu -namespace kstd::ext +namespace kstd { template<> struct is_bitfield_enum<arch::cpu::cr0_flags> : std::true_type @@ -71,7 +71,7 @@ namespace kstd::ext struct is_bitfield_enum<arch::cpu::cr3_flags> : std::true_type { }; -} // namespace kstd::ext +} // namespace kstd namespace arch::cpu { @@ -95,7 +95,7 @@ namespace arch::cpu //! @note This specialization provides the implementation for the case in which the value type of the control register //! is an enum. template<typename Derived, typename ValueType> - struct control_register_with_flags<Derived, ValueType, std::enable_if_t<kstd::ext::bitfield_enum<ValueType>>> + struct control_register_with_flags<Derived, ValueType, std::enable_if_t<kstd::bitfield_enum<ValueType>>> { //! The type of the flags used by this control register using flags = ValueType; diff --git a/arch/x86_64/arch/cpu/model_specific_register.hpp b/arch/x86_64/arch/cpu/model_specific_register.hpp index cf07737f..1410c343 100644 --- a/arch/x86_64/arch/cpu/model_specific_register.hpp +++ b/arch/x86_64/arch/cpu/model_specific_register.hpp @@ -3,7 +3,7 @@ // IWYU pragma: private, include <x86_64/cpu/registers.hpp> -#include <kstd/ext/bitfield_enum.hpp> +#include <kstd/bitfield_enum.hpp> #include <bit> #include <cstdint> @@ -27,7 +27,7 @@ namespace arch::cpu } // namespace arch::cpu -namespace kstd::ext +namespace kstd { template<> @@ -35,7 +35,7 @@ namespace kstd::ext { }; -} // namespace kstd::ext +} // namespace kstd namespace arch::cpu { @@ -62,7 +62,7 @@ namespace arch::cpu //! @note This specialization provides the implementation for the case in which the value type of the model specific //! register is a bitfield enum. template<typename Derived, typename ValueType> - struct model_specific_register_with_flags<Derived, ValueType, std::enable_if_t<kstd::ext::bitfield_enum<ValueType>>> + struct model_specific_register_with_flags<Derived, ValueType, std::enable_if_t<kstd::bitfield_enum<ValueType>>> { //! The of the flags used by this model specific register. using flags = ValueType; diff --git a/arch/x86_64/arch/memory/page_table.hpp b/arch/x86_64/arch/memory/page_table.hpp index f288e3da..5bb4e1aa 100644 --- a/arch/x86_64/arch/memory/page_table.hpp +++ b/arch/x86_64/arch/memory/page_table.hpp @@ -3,7 +3,7 @@ #include <kapi/memory.hpp> -#include <kstd/ext/bitfield_enum.hpp> +#include <kstd/bitfield_enum.hpp> #include <kstd/units.hpp> #include <array> @@ -36,7 +36,7 @@ namespace arch::memory //! An entry in a page table may have any combination of these flags active at the same time. The final flags of a //! page are determined as the strictest combination (logical AND) of all flags along the hierarchy. //! - //! @note This is a bitfield enum as defined by kstd::ext::bitfield_enum. + //! @note This is a bitfield enum as defined by kstd::bitfield_enum. enum struct flags : std::uint64_t { empty = 0, @@ -146,13 +146,13 @@ namespace arch::memory } // namespace arch::memory -namespace kstd::ext +namespace kstd { template<> struct is_bitfield_enum<arch::memory::page_table::entry::flags> : std::true_type { }; -} // namespace kstd::ext +} // namespace kstd namespace arch::memory { diff --git a/kapi/kapi/memory/page_mapper.hpp b/kapi/kapi/memory/page_mapper.hpp index 579c14fd..ec7e7c68 100644 --- a/kapi/kapi/memory/page_mapper.hpp +++ b/kapi/kapi/memory/page_mapper.hpp @@ -6,7 +6,7 @@ #include <kapi/memory/frame.hpp> #include <kapi/memory/page.hpp> -#include <kstd/ext/bitfield_enum.hpp> +#include <kstd/bitfield_enum.hpp> #include <cstddef> #include <cstdint> @@ -79,12 +79,12 @@ namespace kapi::memory } // namespace kapi::memory -namespace kstd::ext +namespace kstd { template<> struct is_bitfield_enum<kapi::memory::page_mapper::flags> : std::true_type { }; -} // namespace kstd::ext +} // namespace kstd #endif
\ No newline at end of file diff --git a/libs/acpi/acpi/data/madt.hpp b/libs/acpi/acpi/data/madt.hpp index 4d992613..2bff7470 100644 --- a/libs/acpi/acpi/data/madt.hpp +++ b/libs/acpi/acpi/data/madt.hpp @@ -7,7 +7,7 @@ #include <acpi/common/table_type.hpp> #include <acpi/common/vla_table.hpp> -#include <kstd/ext/bitfield_enum.hpp> +#include <kstd/bitfield_enum.hpp> #include <kstd/os/error.hpp> #include <kstd/units.hpp> @@ -110,7 +110,7 @@ namespace acpi } // namespace acpi template<> -struct kstd::ext::is_bitfield_enum<enum acpi::processor_local_apic_entry::flags> : std::true_type +struct kstd::is_bitfield_enum<enum acpi::processor_local_apic_entry::flags> : std::true_type { }; diff --git a/libs/kstd/kstd.dox b/libs/kstd/kstd.dox index 5920a3cb..39a2d05e 100644 --- a/libs/kstd/kstd.dox +++ b/libs/kstd/kstd.dox @@ -5,10 +5,3 @@ //! freestanding environment, since it relies on operating system support (e.g. memory allocation). The implementations //! found here, aim to be reasonably close to the specifications found in the C++ language standard (ISO14482). //! However, some differences exists, for example the lack of exceptions. - -//! @namespace kstd::ext -//! Extensions to the Standard Library. -//! -//! This namespace includes custom extensions to what is defined for the C++ Standard Library. These extensions not -//! portable per-se, since they are not implemented by other Standard Library implementations. Whenever possible, -//! Standard Library conformant types, functions, etc. should be used throughout the TeachOS codebase. diff --git a/libs/kstd/kstd/ext/bitfield_enum.hpp b/libs/kstd/kstd/bitfield_enum.hpp index 80fe9d29..047052e4 100644 --- a/libs/kstd/kstd/ext/bitfield_enum.hpp +++ b/libs/kstd/kstd/bitfield_enum.hpp @@ -5,7 +5,7 @@ #include <type_traits> #include <utility> -namespace kstd::ext +namespace kstd { template<typename EnumType> @@ -18,48 +18,51 @@ namespace kstd::ext template<typename EnumType> concept bitfield_enum = is_bitfield_enum<EnumType>::value; -}; // namespace kstd::ext +}; // namespace kstd -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator|(EnumType lhs, EnumType rhs) -> EnumType { - return std::bit_cast<EnumType>(std::to_underlying(lhs) | std::to_underlying(rhs)); + return std::bit_cast<EnumType>( + static_cast<std::underlying_type_t<EnumType>>(std::to_underlying(lhs) | std::to_underlying(rhs))); } -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator|=(EnumType & lhs, EnumType rhs) -> EnumType & { return lhs = lhs | rhs; } -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator&(EnumType lhs, EnumType rhs) -> EnumType { - return std::bit_cast<EnumType>(std::to_underlying(lhs) & std::to_underlying(rhs)); + return std::bit_cast<EnumType>( + static_cast<std::underlying_type_t<EnumType>>(std::to_underlying(lhs) & std::to_underlying(rhs))); } -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator&=(EnumType & lhs, EnumType rhs) -> EnumType & { return lhs = lhs & rhs; } -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator^(EnumType lhs, EnumType rhs) -> EnumType { - return std::bit_cast<EnumType>(std::to_underlying(lhs) ^ std::to_underlying(rhs)); + return std::bit_cast<EnumType>( + static_cast<std::underlying_type_t<EnumType>>(std::to_underlying(lhs) ^ std::to_underlying(rhs))); } -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator^=(EnumType & lhs, EnumType rhs) -> EnumType & { return lhs = lhs ^ rhs; } -template<kstd::ext::bitfield_enum EnumType> +template<kstd::bitfield_enum EnumType> constexpr auto operator~(EnumType lhs) -> EnumType { - return std::bit_cast<EnumType>(~std::to_underlying(lhs)); + return std::bit_cast<EnumType>(static_cast<std::underlying_type_t<EnumType>>(~std::to_underlying(lhs))); } #endif
\ No newline at end of file |
