13 template <
typename DataType>
14 static File CreateFile(
const char* name, DataType& raw)
16 using StoredType = std::remove_reference_t<DataType>;
19 if constexpr (std::is_const_v<StoredType>)
21 file.file_type_ = FileType::READ_ONLY;
22 file.addr_const_ = &raw;
26 file.file_type_ = FileType::READ_WRITE;
30 file.size_ =
sizeof(StoredType);
49 template <
typename ArgType>
50 static File CreateFile(
const char* name,
51 int (*exec)(ArgType arg,
int argc,
char** argv), ArgType&& arg)
53 using StoredArgType = std::remove_reference_t<ArgType>;
54 struct ExecutableBlock
57 decltype(exec) exec_fun_;
62 auto block =
new ExecutableBlock{std::forward<ArgType>(arg), exec};
63 file.file_type_ = FileType::EXEC;
66 file.exec_ = [](
void* raw,
int argc,
char** argv)
68 auto* block =
static_cast<ExecutableBlock*
>(raw);
69 return block->exec_fun_(block->arg_, argc, argv);
90 template <
typename ArgType>
91 static File CreateCommand(
const char* name,
92 int (*exec)(ArgType arg,
int argc,
char** argv),
95 return CreateFile(name, exec, std::forward<ArgType>(arg));
105 static Dir CreateDir(
const char* name) {
return Dir(name); }
111 void Add(
File& file) { root_.
Add(file); }
117 void Add(
Dir& dir) { root_.
Add(dir); }
123 void Add(
Custom& custom) { root_.
Add(custom); }
137 Dir* FindDir(
const char* name) {
return root_.
FindDirRev(name); }
RamFS 的自定义节点片段 / Custom-node fragment of RamFS
RamFS 的目录节点片段 / Directory-node fragment of RamFS
Dir * FindDirRev(const char *name)
递归查找目录,支持 "." 和 ".." / Find a directory recursively, supporting "." and ".."
File * FindFileRev(const char *name)
递归查找文件 / Find a file recursively
void Add(File &file)
添加直属文件节点 / Add a direct child file node
Custom * FindCustomRev(const char *name)
递归查找自定义节点 / Find a custom node recursively
RamFS 的文件节点片段 / File-node fragment of RamFS