Bläddra i källkod

feat(c++): add operator& to list iterators

greatbridf 2 år sedan
förälder
incheckning
6e4a649a55

+ 1 - 1
include/kernel/process.hpp

@@ -157,7 +157,7 @@ public:
 
     constexpr process* find(pid_t pid)
     {
-        return m_idx.find(pid)->value.ptr();
+        return &m_idx.find(pid)->value;
     }
 
     constexpr bool has_child(pid_t pid)

+ 3 - 3
include/types/hash_map.hpp

@@ -164,16 +164,16 @@ public:
             return !(*this == iter);
         }
 
-        constexpr operator bool()
+        constexpr operator bool(void)
         {
             return p != nullptr;
         }
 
-        constexpr Reference operator*() const noexcept
+        constexpr Reference operator*(void) const noexcept
         {
             return *p;
         }
-        constexpr Pointer operator->() const noexcept
+        constexpr Pointer operator->(void) const noexcept
         {
             return p;
         }

+ 8 - 5
include/types/list.hpp

@@ -66,6 +66,8 @@ public:
         using Value = typename types::traits::remove_pointer<Pointer>::type;
         using Reference = typename types::traits::add_reference<Value>::type;
 
+        friend class list;
+
     public:
         constexpr iterator(const iterator& iter) noexcept
             : n(iter.n)
@@ -99,7 +101,7 @@ public:
             return !(*this == iter);
         }
 
-        constexpr iterator& operator++() noexcept
+        constexpr iterator& operator++(void) noexcept
         {
             n = n->next;
             return *this;
@@ -112,7 +114,7 @@ public:
             return iter;
         }
 
-        constexpr iterator& operator--() noexcept
+        constexpr iterator& operator--(void) noexcept
         {
             n = n->prev;
             return *this;
@@ -125,21 +127,22 @@ public:
             return iter;
         }
 
-        constexpr Reference operator*() const noexcept
+        constexpr Reference operator*(void) const noexcept
         {
             return n->value;
         }
 
-        constexpr Pointer operator->() const noexcept
+        constexpr Pointer operator&(void) const noexcept
         {
             return &n->value;
         }
 
-        constexpr Pointer ptr(void) const noexcept
+        constexpr Pointer operator->(void) const noexcept
         {
             return &n->value;
         }
 
+    protected:
         constexpr node_base_type* _node(void) const noexcept
         {
             return n;

+ 9 - 4
include/types/vector.hpp

@@ -62,7 +62,7 @@ public:
             return !(*this == iter);
         }
 
-        constexpr iterator& operator++() noexcept
+        constexpr iterator& operator++(void) noexcept
         {
             ++p;
             return *this;
@@ -75,7 +75,7 @@ public:
             return iter;
         }
 
-        constexpr iterator& operator--() noexcept
+        constexpr iterator& operator--(void) noexcept
         {
             --p;
             return *this;
@@ -100,12 +100,17 @@ public:
             return iter;
         }
 
-        constexpr Reference operator*() const noexcept
+        constexpr Reference operator*(void) const noexcept
         {
             return *p;
         }
 
-        constexpr Pointer operator->() const noexcept
+        constexpr Pointer operator&(void) const noexcept
+        {
+            return p;
+        }
+
+        constexpr Pointer operator->(void) const noexcept
         {
             return p;
         }

+ 1 - 1
src/kernel/event/event.cpp

@@ -72,7 +72,7 @@ kernel::evt kernel::evtqueue::front()
 
 const kernel::evt* kernel::evtqueue::peek(void) const
 {
-    return m_evts.begin().ptr();
+    return &m_evts.begin();
 }
 
 bool kernel::evtqueue::empty(void) const

+ 1 - 1
src/kernel/interrupt.cpp

@@ -173,7 +173,7 @@ extern "C" void int14_handler(int14_data* d)
         _int14_panic(d->v_eip, d->l_addr, d->error_code);
 
     pte_t* pte = to_pte(mms->m_pd, d->l_addr);
-    page* page = lto_page(mm_area.ptr(), d->l_addr);
+    page* page = lto_page(&mm_area, d->l_addr);
 
     if (unlikely(d->error_code.present == 0 && !mm_area->mapped_file))
         _int14_panic(d->v_eip, d->l_addr, d->error_code);

+ 6 - 6
src/kernel/process.cpp

@@ -68,7 +68,7 @@ process::process(const process& val, const thread& main_thd)
     , pid { process::alloc_pid() }
     , ppid { val.pid }
 {
-    auto* thd = thds.emplace_back(main_thd).ptr();
+    auto* thd = &thds.emplace_back(main_thd);
     thd->owner = this;
 
     for (auto& area : val.mms) {
@@ -88,13 +88,13 @@ process::process(pid_t _ppid)
     , ppid { _ppid }
 {
     auto thd = thds.emplace_back(this, true);
-    readythds->push(thd.ptr());
+    readythds->push(&thd);
 }
 
 process::process(void (*func)(void), pid_t _ppid)
     : process { _ppid }
 {
-    auto* esp = &thds.begin().ptr()->esp;
+    auto* esp = &thds.begin()->esp;
 
     // return(start) address
     push_stack(esp, (uint32_t)func);
@@ -113,7 +113,7 @@ process::process(void (*func)(void), pid_t _ppid)
 process::~process()
 {
     for (auto iter = thds.begin(); iter != thds.end(); ++iter)
-        readythds->remove_all(iter.ptr());
+        readythds->remove_all(&iter);
 }
 
 inline void NORETURN _noreturn_crash(void)
@@ -217,14 +217,14 @@ void NORETURN init_scheduler()
     procs = types::kernel_allocator_pnew(procs);
     readythds = types::kernel_ident_allocator_pnew(readythds);
 
-    auto* init = procs->emplace(1).ptr();
+    auto* init = &procs->emplace(1);
 
     // we need interrupts enabled for cow mapping so now we disable it
     // in case timer interrupt mess things up
     asm_cli();
 
     current_process = init;
-    current_thread = init->thds.begin().ptr();
+    current_thread = &init->thds.begin();
 
     tss.ss0 = KERNEL_DATA_SEGMENT;
     tss.esp0 = current_thread->kstack;

+ 2 - 2
src/kernel/syscall.cpp

@@ -34,8 +34,8 @@ void _syscall_not_impl(interrupt_stack* data)
 extern "C" void _syscall_stub_fork_return(void);
 void _syscall_fork(interrupt_stack* data)
 {
-    auto* newproc = procs->emplace(*current_process, *current_thread).ptr();
-    thread* newthd = newproc->thds.begin().ptr();
+    auto* newproc = &procs->emplace(*current_process, *current_thread);
+    thread* newthd = &newproc->thds.begin();
 
     // create fake interrupt stack
     push_stack(&newthd->esp, data->ss);

+ 6 - 6
src/kernel/vfs.cpp

@@ -49,14 +49,14 @@ fs::vfs::dentry::dentry(dentry&& val)
 fs::vfs::dentry* fs::vfs::dentry::append(inode* ind, const name_type& name)
 {
     auto iter = children.emplace_back(this, ind, name);
-    idx_children.insert(iter->name, iter.ptr());
-    return iter.ptr();
+    idx_children.insert(iter->name, &iter);
+    return &iter;
 }
 fs::vfs::dentry* fs::vfs::dentry::append(inode* ind, name_type&& name)
 {
     auto iter = children.emplace_back(this, ind, types::move(name));
-    idx_children.insert(iter->name, iter.ptr());
-    return iter.ptr();
+    idx_children.insert(iter->name, &iter);
+    return &iter;
 }
 fs::vfs::dentry* fs::vfs::dentry::find(const name_type& name)
 {
@@ -97,8 +97,8 @@ fs::ino_t fs::vfs::_assign_inode_id(void)
 fs::inode* fs::vfs::cache_inode(inode_flags flags, uint32_t perm, size_t size, void* impl_data)
 {
     auto iter = _inodes.emplace_back(inode { flags, perm, impl_data, _assign_inode_id(), this, size });
-    _idx_inodes.insert(iter->ino, iter.ptr());
-    return iter.ptr();
+    _idx_inodes.insert(iter->ino, &iter);
+    return &iter;
 }
 fs::inode* fs::vfs::get_inode(ino_t ino)
 {