]> git.ameliathe1st.gay Git - voyage-au-centre-des-fichiers.git/commitdiff
Moved phys_ptr to a separate file
authorAmelia Coutard <eliottulio.coutard@gmail.com>
Thu, 12 May 2022 10:58:44 +0000 (12:58 +0200)
committerAmelia Coutard <eliottulio.coutard@gmail.com>
Thu, 12 May 2022 10:58:44 +0000 (12:58 +0200)
src/fb.cpp
src/fb.hpp
src/multiboot2.hpp
src/paging.hpp
src/phys_ptr.hpp [new file with mode: 0644]
src/utils.hpp

index 3956290a7bc55c81390b817e989cc453a69f5cb5..d7f50c17e023d186c29d996beb8ecbb6a6159adf 100644 (file)
@@ -1,4 +1,5 @@
 #include "serial.hpp"
+#include "utils.hpp"
 #include "fb.hpp"
 
 os::color os::operator*(color c1, color c2) {
index 7c512d92fe5effd7095b62688de481a1893948ea..7acb6af4d49b26c38eab5b5bfde101ce2c90c84a 100644 (file)
@@ -1,7 +1,7 @@
 #pragma once
 
 #include <cstdint>
-#include "utils.hpp"
+#include "phys_ptr.hpp"
 
 namespace os {
 
index 372fb1378cd89737e8ffd54e716060e028eb402b..9fd7c12f9127319d0f6b52ee9f3b7fb81d204340 100644 (file)
@@ -2,7 +2,7 @@
 
 #ifdef __cplusplus
 #      include <cstdint>
-#      include "utils.hpp"
+#      include "phys_ptr.hpp"
        namespace multiboot2 {
 #endif // __cplusplus
 
index 9013fb53bbbafb7620cb3c33f0f5ec4fbfdf5074..40849057360d1e281a5f18eb27dedd0cbe48f949 100644 (file)
@@ -3,6 +3,7 @@
 #include <cstdint>
 #include "serial.hpp"
 #include "utils.hpp"
+#include "phys_ptr.hpp"
 
 namespace os { namespace paging {
 
diff --git a/src/phys_ptr.hpp b/src/phys_ptr.hpp
new file mode 100644 (file)
index 0000000..f614de8
--- /dev/null
@@ -0,0 +1,78 @@
+#pragma once
+
+#include <cstdint>
+#include <cstddef>
+#include <compare>
+
+namespace os {
+
+template <typename T>
+class phys_ptr {
+public:
+       constexpr explicit phys_ptr(std::uintptr_t phys_addr): phys_addr(phys_addr) {}
+       constexpr phys_ptr(std::nullptr_t): phys_addr(0) {}
+
+       constexpr T& operator[](std::size_t i) const {
+               return get_virt_addr()[i];
+       }
+       constexpr T& operator*() const {
+               return *get_virt_addr();
+       }
+       constexpr T* operator->() const {
+               return get_virt_addr();
+       }
+
+       constexpr phys_ptr<T>& operator++() {
+               phys_addr += sizeof(T);
+       }
+       constexpr phys_ptr<T>& operator++(int) {
+               const auto old = *this;
+               operator++();
+               return old;
+       }
+       constexpr phys_ptr<T>& operator--() {
+               phys_addr -= sizeof(T);
+       }
+       constexpr phys_ptr<T>& operator--(int) {
+               const auto old = *this;
+               operator--();
+               return old;
+       }
+       constexpr phys_ptr<T>& operator+=(std::ptrdiff_t offset) {
+               phys_addr += offset * sizeof(T);
+               return *this;
+       }
+       constexpr phys_ptr<T>& operator-=(std::ptrdiff_t offset) {
+               phys_addr -= offset * sizeof(T);
+               return *this;
+       }
+
+       friend constexpr auto operator<=>(phys_ptr<T> a, phys_ptr<T> b) { return    a.phys_addr <=> b.phys_addr;    }
+       friend constexpr auto operator== (phys_ptr<T> a, phys_ptr<T> b) { return    a.phys_addr ==  b.phys_addr;    }
+
+       friend constexpr phys_ptr<T> operator+(phys_ptr<T> ptr, std::ptrdiff_t offset) {
+               return phys_ptr<T>{ptr.phys_addr + offset * sizeof(T)};
+       }
+       friend constexpr phys_ptr<T> operator+(std::ptrdiff_t offset, phys_ptr<T> ptr) {
+               return ptr + offset;
+       }
+       friend constexpr phys_ptr<T> operator-(phys_ptr<T> ptr, std::ptrdiff_t offset) {
+               return phys_ptr<T>{ptr.phys_addr - offset * sizeof(T)};
+       }
+       friend constexpr std::ptrdiff_t operator-(phys_ptr<T> a, phys_ptr<T> b) {
+               return (a.phys_addr - b.phys_addr) / sizeof(T);
+       }
+
+       constexpr std::uintptr_t get_phys_addr() const {
+               return phys_addr;
+       }
+
+private:
+       constexpr T* get_virt_addr() const {
+               return reinterpret_cast<T*>(phys_addr + 0xFFFF800000000000);
+       }
+
+       std::uintptr_t phys_addr;
+};
+
+} // namespace os
index 5210817199889d5cfa49740d81d4cb631cdc9322..e2e242fda7b5c44c1a2e91bb9bbed10f74805df8 100644 (file)
@@ -1,79 +1,7 @@
 #pragma once
 
-#include <cstddef>
-#include <cstdint>
-#include <compare>
-
 namespace os {
 
-       template <typename T>
-       class phys_ptr {
-       public:
-               constexpr explicit phys_ptr(std::uintptr_t phys_addr): phys_addr(phys_addr) {}
-               constexpr phys_ptr(std::nullptr_t): phys_addr(0) {}
-
-               constexpr T& operator[](std::size_t i) const {
-                       return get_virt_addr()[i];
-               }
-               constexpr T& operator*() const {
-                       return *get_virt_addr();
-               }
-               constexpr T* operator->() const {
-                       return get_virt_addr();
-               }
-
-               constexpr phys_ptr<T>& operator++() {
-                       phys_addr += sizeof(T);
-               }
-               constexpr phys_ptr<T>& operator++(int) {
-                       const auto old = *this;
-                       operator++();
-                       return old;
-               }
-               constexpr phys_ptr<T>& operator--() {
-                       phys_addr -= sizeof(T);
-               }
-               constexpr phys_ptr<T>& operator--(int) {
-                       const auto old = *this;
-                       operator--();
-                       return old;
-               }
-               constexpr phys_ptr<T>& operator+=(std::ptrdiff_t offset) {
-                       phys_addr += offset * sizeof(T);
-                       return *this;
-               }
-               constexpr phys_ptr<T>& operator-=(std::ptrdiff_t offset) {
-                       phys_addr -= offset * sizeof(T);
-                       return *this;
-               }
-
-               friend constexpr auto operator<=>(phys_ptr<T> a, phys_ptr<T> b) { return    a.phys_addr <=> b.phys_addr;    }
-               friend constexpr auto operator== (phys_ptr<T> a, phys_ptr<T> b) { return    a.phys_addr ==  b.phys_addr;    }
-
-               friend constexpr phys_ptr<T> operator+(phys_ptr<T> ptr, std::ptrdiff_t offset) {
-                       return phys_ptr<T>{ptr.phys_addr + offset * sizeof(T)};
-               }
-               friend constexpr phys_ptr<T> operator+(std::ptrdiff_t offset, phys_ptr<T> ptr) {
-                       return ptr + offset;
-               }
-               friend constexpr phys_ptr<T> operator-(phys_ptr<T> ptr, std::ptrdiff_t offset) {
-                       return phys_ptr<T>{ptr.phys_addr - offset * sizeof(T)};
-               }
-               friend constexpr std::ptrdiff_t operator-(phys_ptr<T> a, phys_ptr<T> b) {
-                       return (a.phys_addr - b.phys_addr) / sizeof(T);
-               }
-
-               constexpr std::uintptr_t get_phys_addr() const {
-                       return phys_addr;
-               }
-
-       private:
-               constexpr T* get_virt_addr() const {
-                       return reinterpret_cast<T*>(phys_addr + 0xFFFF800000000000);
-               }
-
-               std::uintptr_t phys_addr;
-       };
+void halt();
 
-       void halt();
 } // namespace os