47 lines
1.3 KiB
C++
47 lines
1.3 KiB
C++
#ifndef INODE_MANAGER_HPP
|
|
#define INODE_MANAGER_HPP
|
|
|
|
#include "fs_constants.hpp"
|
|
#include "fs_data_types.hpp"
|
|
|
|
class Fs;
|
|
|
|
class INode_Manager {
|
|
public:
|
|
const int INODES_PER_BLOCK = IO_BLOCK_SIZE / INODE_SIZE;
|
|
|
|
INode_Manager(Fs *fs, u_int64_t block_segment_start,
|
|
u_int64_t block_segment_end);
|
|
|
|
virtual int new_inode(u_int64_t uid, u_int64_t gid, u_int64_t permissions,
|
|
INode_Data *inode_data) = 0;
|
|
virtual int free_inode(INode_Data *inode_data) = 0;
|
|
|
|
virtual int format() = 0;
|
|
|
|
u_int64_t get_block_num(u_int64_t inode_data);
|
|
u_int64_t get_block_offset(u_int64_t inode_data);
|
|
|
|
int load_inode(INode_Data *inode_data);
|
|
int save_inode(INode_Data *inode_data);
|
|
|
|
protected:
|
|
Fs *fs;
|
|
u_int64_t block_segment_start, block_segment_end;
|
|
u_int64_t max_num_inodes;
|
|
};
|
|
|
|
class INode_Manager_Freelist : public INode_Manager {
|
|
public:
|
|
INode_Manager_Freelist(Fs *fs, u_int64_t block_segment_start,
|
|
u_int64_t block_segment_end)
|
|
: INode_Manager(fs, block_segment_start, block_segment_end) {}
|
|
|
|
int new_inode(u_int64_t uid, u_int64_t gid, u_int64_t permissions,
|
|
INode_Data *inode_data) override;
|
|
int free_inode(INode_Data *inode_data) override;
|
|
|
|
int format() override;
|
|
};
|
|
|
|
#endif |