Luna/kernel/src/fs/tmpfs/FileSystem.h

66 lines
1.3 KiB
C
Raw Normal View History

#pragma once
#include "fs/VFS.h"
2023-02-25 17:06:23 +00:00
#include <luna/Atomic.h>
#include <luna/Badge.h>
#include <luna/Vector.h>
namespace TmpFS
{
class FileSystem : public VFS::FileSystem
{
public:
VFS::Inode& root_inode() const override
{
return *m_root_inode;
}
Result<SharedPtr<VFS::Inode>> create_file_inode() override;
static Result<SharedPtr<VFS::FileSystem>> create();
virtual ~FileSystem() = default;
private:
FileSystem() = default;
void set_root(SharedPtr<VFS::Inode> root);
SharedPtr<VFS::Inode> m_root_inode;
Vector<SharedPtr<VFS::Inode>> m_inodes;
2023-02-25 17:06:23 +00:00
Atomic<usize> m_next_inode_number { 2 };
};
class Inode : public VFS::FileInode
{
public:
Inode() = default;
void set_fs(FileSystem& fs, Badge<FileSystem>)
{
m_fs = &fs;
}
void set_inode_number(usize inum, Badge<FileSystem>)
{
m_inode_number = inum;
}
VFS::FileSystem& fs() const override
{
return *m_fs;
}
usize inode_number() const override
{
return m_inode_number;
}
virtual ~Inode() = default;
private:
VFS::FileSystem* m_fs;
usize m_inode_number;
};
}