diff options
| -rw-r--r-- | libs/multiboot2/include/multiboot2/impl/tag.hpp | 20 | ||||
| -rw-r--r-- | libs/multiboot2/include/multiboot2/information.hpp | 14 |
2 files changed, 30 insertions, 4 deletions
diff --git a/libs/multiboot2/include/multiboot2/impl/tag.hpp b/libs/multiboot2/include/multiboot2/impl/tag.hpp index 5edcd6f..a6e2678 100644 --- a/libs/multiboot2/include/multiboot2/impl/tag.hpp +++ b/libs/multiboot2/include/multiboot2/impl/tag.hpp @@ -82,16 +82,18 @@ namespace multiboot2::impl { using range_type = Range<VlaData const>; + using value_type = range_type::value_type; + using reference = range_type::const_reference; + using const_reference = range_type::const_reference; + using pointer = range_type::const_pointer; + using const_pointer = range_type::const_pointer; + using iterator = range_type::const_iterator; using const_iterator = range_type::const_iterator; using reverse_iterator = range_type::const_reverse_iterator; using const_reverse_iterator = range_type::const_reverse_iterator; using size_type = range_type::size_type; using difference_type = range_type::difference_type; - using reference = range_type::const_reference; - using const_reference = range_type::const_reference; - using pointer = range_type::const_pointer; - using const_pointer = range_type::const_pointer; vla_tag() : tag<Data>{} @@ -168,6 +170,16 @@ namespace multiboot2::impl return m_vla.data(); } + [[nodiscard]] auto at() const -> const_reference + { + return m_vla.at(); + } + + [[nodiscard]] auto operator[](std::size_t index) const noexcept -> const_reference + { + return m_vla[index]; + } + private: auto static vla_start(tag_header const * header) noexcept -> VlaData * { diff --git a/libs/multiboot2/include/multiboot2/information.hpp b/libs/multiboot2/include/multiboot2/information.hpp index 4be32aa..25f034d 100644 --- a/libs/multiboot2/include/multiboot2/information.hpp +++ b/libs/multiboot2/include/multiboot2/information.hpp @@ -11,6 +11,7 @@ #include <algorithm> #include <cstddef> #include <cstdint> +#include <cstdlib> #include <optional> #include <span> #include <string_view> @@ -58,6 +59,19 @@ namespace multiboot2 { using base = impl::vla_tag<impl::elf_symbols_data, elf::section_header<Format> const, std::span>; using base::base; + + [[nodiscard]] auto name(elf::section_header<Format> const & section) const noexcept -> std::string_view + { + if (!this->string_table_index) + { + std::abort(); + } + + auto string_table = this->begin()[this->string_table_index]; + auto name_offset = section.name_offset; + auto name_array = std::bit_cast<char const *>(string_table.virtual_load_address); + return name_array + name_offset; + } }; /** |
