aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/arch/cpu/control_register.hpp8
-rw-r--r--arch/x86_64/arch/cpu/model_specific_register.hpp8
-rw-r--r--arch/x86_64/arch/memory/page_table.hpp8
-rw-r--r--kapi/kapi/memory/page_mapper.hpp6
-rw-r--r--libs/acpi/acpi/data/madt.hpp4
-rw-r--r--libs/kstd/kstd.dox7
-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