aboutsummaryrefslogtreecommitdiff
path: root/source/include/memory/asm_pointer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/include/memory/asm_pointer.hpp')
-rw-r--r--source/include/memory/asm_pointer.hpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/source/include/memory/asm_pointer.hpp b/source/include/memory/asm_pointer.hpp
index 2001561..9ec2218 100644
--- a/source/include/memory/asm_pointer.hpp
+++ b/source/include/memory/asm_pointer.hpp
@@ -4,36 +4,63 @@
namespace teachos::memory
{
+ /**
+ * @brief A pointer that is defined in some assembly source file.
+ *
+ * @tparam Type The type of the pointer
+ * @since 0.0.1
+ */
template<typename Type>
struct asm_pointer
{
- using pointer = Type;
+ /**
+ * @brief The type of the underlying pointer.
+ */
+ using pointer = Type *;
- constexpr asm_pointer(Type & pointer)
+ /**
+ * @brief Construct a new asm_pointer for a given assembly-defined pointer.
+ * @param pointer A pointer defined in assembly.
+ */
+ constexpr asm_pointer(Type *& pointer)
: m_pointer{&pointer}
{
}
- auto constexpr operator->() -> Type * { return m_pointer; }
- auto constexpr operator->() const -> Type const * { return m_pointer; }
- auto constexpr operator*() -> Type & { return *m_pointer; }
- auto constexpr operator*() const -> Type const & { return *m_pointer; }
+ /**
+ * @brief Access the underlying pointer.
+ * @return The pointer wrapped by this asm_pointer.
+ */
+ auto constexpr operator*() -> pointer & { return *m_pointer; }
+
+ /**
+ * @brief Access the underlying pointer.
+ * @return The pointer wrapped by this asm_pointer.
+ */
+ auto constexpr operator*() const -> pointer const & { return *m_pointer; }
private:
- Type * m_pointer;
+ pointer * m_pointer;
};
+ /**
+ * @copydoc asm_pointer
+ *
+ * @note This specialization allows the use of this type for pointers to constant data.
+ * @since 0.0.1
+ */
template<typename Type>
struct asm_pointer<Type const>
{
+ /** @copydoc asm_pointer<Type>::asm_pointer */
constexpr asm_pointer(Type const & pointer)
: m_pointer{&pointer}
{
}
- auto constexpr operator->() -> Type const * { return m_pointer; }
- auto constexpr operator->() const -> Type const * { return m_pointer; }
+ /** @copydoc asm_pointer<Type>::operator*() */
auto constexpr operator*() -> Type const & { return *m_pointer; }
+ /** @copydoc asm_pointer<Type>::operator*() const */
auto constexpr operator*() const -> Type const & { return *m_pointer; }
private: