#pragma once #include #include #include #include #include class Inode; class VFS; // FIXME: Custody needs some locking. class Custody : public RefCounted , public InlineLinkedListNode { public: static Custody* get_if_cached(Custody* parent, const StringView& name); static NonnullRefPtr get_or_create(Custody* parent, const StringView& name, Inode&); static NonnullRefPtr create(Custody* parent, const StringView& name, Inode& inode) { return adopt(*new Custody(parent, name, inode)); } ~Custody(); Custody* parent() { return m_parent.ptr(); } const Custody* parent() const { return m_parent.ptr(); } Inode& inode() { return *m_inode; } const Inode& inode() const { return *m_inode; } const String& name() const { return m_name; } String absolute_path() const; bool is_deleted() const { return m_deleted; } bool is_mounted_on() const { return m_mounted_on; } void did_delete(Badge); void did_mount_on(Badge); void did_rename(Badge, const String& name); // For InlineLinkedListNode. Custody* m_next { nullptr }; Custody* m_prev { nullptr }; private: Custody(Custody* parent, const StringView& name, Inode&); RefPtr m_parent; String m_name; NonnullRefPtr m_inode; bool m_deleted { false }; bool m_mounted_on { false }; };