libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
LibXR::RamFS Class Reference

轻量级内存文件系统 / Lightweight in-memory file system More...

#include <ramfs.hpp>

Collaboration diagram for LibXR::RamFS:
[legend]

Data Structures

class  Custom
 自定义节点片段 / Custom-node fragment More...
 
class  Dir
 目录节点片段 / Directory-node fragment More...
 
class  File
 文件节点片段 / File-node fragment More...
 
class  FsNode
 节点基类片段 / Base-node fragment More...
 

Public Types

enum class  FsNodeType : uint8_t { FILE , DIR , CUSTOM }
 文件系统节点类型 / File-system node type More...
 

Public Member Functions

 RamFS (const char *name="ramfs")
 构造 RamFS,并创建根目录和 bin 目录 / Construct RamFS with root and bin directories
 
void Add (File &file)
 添加文件节点到根目录 / Add a file node to the root directory
 
void Add (Dir &dir)
 添加目录节点到根目录 / Add a directory node to the root directory
 
void Add (Custom &custom)
 添加自定义节点到根目录 / Add a custom node to the root directory
 
FileFindFile (const char *name)
 从整个 RamFS 递归查找文件 / Find a file recursively from the RamFS root
 
DirFindDir (const char *name)
 从整个 RamFS 递归查找目录 / Find a directory recursively from the RamFS root
 
CustomFindCustom (const char *name)
 从整个 RamFS 递归查找自定义节点 / Find a custom node recursively from the RamFS root
 

Static Public Member Functions

template<typename DataType >
static File CreateFile (const char *name, DataType &raw)
 工厂与根入口片段 / Factory and root-entry fragment
 
template<typename ArgType >
static File CreateFile (const char *name, int(*exec)(ArgType arg, int argc, char **argv), ArgType &&arg)
 创建可执行文件 / Create an executable file
 
template<typename ArgType >
static File CreateCommand (const char *name, int(*exec)(ArgType arg, int argc, char **argv), ArgType &&arg)
 创建命令兼容入口,返回可执行文件 / Create a command-compatible executable file
 
static Dir CreateDir (const char *name)
 创建目录节点 / Create a directory node
 

Data Fields

Dir root_
 
Dir bin_
 预留的可执行文件目录 / Reserved executable-file directory.
 

Private Types

enum class  FileType : uint8_t { READ_ONLY , READ_WRITE , EXEC }
 文件内部存储形态 / Internal storage kind of one file node More...
 
using Tree = RBTree<const char*>
 RamFS 目录索引树类型 / Directory index tree type used by RamFS.
 

Static Private Member Functions

static int CompareStr (const char *const &a, const char *const &b)
 RamFS 名称比较函数 / Name comparator used by RamFS trees.
 
static char * DuplicateName (const char *name)
 复制并持有一个节点名称 / Duplicate and retain one node name
 

Detailed Description

轻量级内存文件系统 / Lightweight in-memory file system

RamFS 组织外部内存文件、可执行文件、目录和自定义节点 / RamFS organizes external-memory files, executable files, directories, and custom nodes. 文件数据由调用方持有 / File payload storage is owned by the caller.

Definition at line 22 of file ramfs.hpp.

Member Typedef Documentation

◆ Tree

using LibXR::RamFS::Tree = RBTree<const char*>
private

RamFS 目录索引树类型 / Directory index tree type used by RamFS.

Definition at line 50 of file ramfs.hpp.

Member Enumeration Documentation

◆ FileType

enum class LibXR::RamFS::FileType : uint8_t
strongprivate

文件内部存储形态 / Internal storage kind of one file node

Enumerator
READ_ONLY 

只读外部数据映射 / Read-only external-data view

READ_WRITE 

可写外部数据映射 / Read-write external-data view

EXEC 

可执行命令入口 / Executable command entry

Definition at line 55 of file ramfs.hpp.

56 {
57 READ_ONLY,
59 EXEC,
60 };
@ READ_ONLY
只读外部数据映射 / Read-only external-data view
@ READ_WRITE
可写外部数据映射 / Read-write external-data view
@ EXEC
可执行命令入口 / Executable command entry

◆ FsNodeType

enum class LibXR::RamFS::FsNodeType : uint8_t
strong

文件系统节点类型 / File-system node type

Enumerator
FILE 

文件 / File

DIR 

目录 / Directory

CUSTOM 

用户自定义节点 / User-defined node

Definition at line 37 of file ramfs.hpp.

38 {
39 FILE,
40 DIR,
41 CUSTOM,
42 };
@ CUSTOM
用户自定义节点 / User-defined node
@ DIR
目录 / Directory

Constructor & Destructor Documentation

◆ RamFS()

RamFS::RamFS ( const char * name = "ramfs")

构造 RamFS,并创建根目录和 bin 目录 / Construct RamFS with root and bin directories

构造 RamFS,并挂接根目录下的 bin 目录 Construct RamFS and attach the bin directory under the root

Parameters
name根目录名称 / Root directory name
Note
包含动态内存分配 / Contains dynamic memory allocation
Parameters
name根目录名称 / Root directory name

Definition at line 10 of file ramfs.cpp.

10: root_(name), bin_("bin") { root_.Add(bin_); }
void Add(File &file)
添加直属文件节点 / Add a direct child file node
Definition ramfs.hpp:16
Dir bin_
预留的可执行文件目录 / Reserved executable-file directory.
Definition ramfs.hpp:149

Member Function Documentation

◆ Add() [1/3]

void LibXR::RamFS::Add ( Custom & custom)
inline

添加自定义节点到根目录 / Add a custom node to the root directory

Parameters
custom自定义节点 / Custom node

Definition at line 123 of file ramfs.hpp.

135{
144class RamFS
145{
146 public:
154 RamFS(const char* name = "ramfs");
155
159 enum class FsNodeType : uint8_t
160 {
161 FILE,
162 DIR,
163 CUSTOM,
164 };
165
166 class Dir;
167
168 private:
172 using Tree = RBTree<const char*>;
173
177 enum class FileType : uint8_t
178 {
179 READ_ONLY,
180 READ_WRITE,
181 EXEC,
182 };
183
191 static int CompareStr(const char* const& a, const char* const& b);
192
193 public:
197#include "fs_node.hpp"
201#include "file.hpp"
205#include "custom.hpp"
209#include "dir.hpp"
213#include "factory.hpp"
214
215 private:
225 static char* DuplicateName(const char* name);
226};
227} // namespace LibXR
RamFS 的目录节点片段 / Directory-node fragment of RamFS
Definition dir.hpp:9
RamFS(const char *name="ramfs")
构造 RamFS,并创建根目录和 bin 目录 / Construct RamFS with root and bin directories
Definition ramfs.cpp:10
FsNodeType
文件系统节点类型 / File-system node type
Definition ramfs.hpp:38
static char * DuplicateName(const char *name)
复制并持有一个节点名称 / Duplicate and retain one node name
Definition ramfs.cpp:29
RBTree< const char * > Tree
RamFS 目录索引树类型 / Directory index tree type used by RamFS.
Definition ramfs.hpp:50
static int CompareStr(const char *const &a, const char *const &b)
RamFS 名称比较函数 / Name comparator used by RamFS trees.
Definition ramfs.cpp:20
FileType
文件内部存储形态 / Internal storage kind of one file node
Definition ramfs.hpp:56

◆ Add() [2/3]

void LibXR::RamFS::Add ( Dir & dir)
inline

添加目录节点到根目录 / Add a directory node to the root directory

Parameters
dir目录节点 / Directory node

Definition at line 117 of file ramfs.hpp.

129{
138class RamFS
139{
140 public:
148 RamFS(const char* name = "ramfs");
149
153 enum class FsNodeType : uint8_t
154 {
155 FILE,
156 DIR,
157 CUSTOM,
158 };
159
160 class Dir;
161
162 private:
166 using Tree = RBTree<const char*>;
167
171 enum class FileType : uint8_t
172 {
173 READ_ONLY,
174 READ_WRITE,
175 EXEC,
176 };
177
185 static int CompareStr(const char* const& a, const char* const& b);
186
187 public:
191#include "fs_node.hpp"
195#include "file.hpp"
199#include "custom.hpp"
203#include "dir.hpp"
207#include "factory.hpp"
208
209 private:
219 static char* DuplicateName(const char* name);
220};
221} // namespace LibXR

◆ Add() [3/3]

void LibXR::RamFS::Add ( File & file)
inline

添加文件节点到根目录 / Add a file node to the root directory

Parameters
file文件节点 / File node

Definition at line 111 of file ramfs.hpp.

123{
132class RamFS
133{
134 public:
142 RamFS(const char* name = "ramfs");
143
147 enum class FsNodeType : uint8_t
148 {
149 FILE,
150 DIR,
151 CUSTOM,
152 };
153
154 class Dir;
155
156 private:
160 using Tree = RBTree<const char*>;
161
165 enum class FileType : uint8_t
166 {
167 READ_ONLY,
168 READ_WRITE,
169 EXEC,
170 };
171
179 static int CompareStr(const char* const& a, const char* const& b);
180
181 public:
185#include "fs_node.hpp"
189#include "file.hpp"
193#include "custom.hpp"
197#include "dir.hpp"
201#include "factory.hpp"
202
203 private:
213 static char* DuplicateName(const char* name);
214};
215} // namespace LibXR

◆ CompareStr()

int RamFS::CompareStr ( const char *const & a,
const char *const & b )
staticprivate

RamFS 名称比较函数 / Name comparator used by RamFS trees.

RamFS 目录树里的名称比较函数 Name comparator used by the RamFS directory tree.

Parameters
a左侧名称 / Left name
b右侧名称 / Right name
Returns
比较结果,遵循 strcmp() 语义 / Comparison result following strcmp() semantics

Definition at line 20 of file ramfs.cpp.

20{ return strcmp(a, b); }

◆ CreateCommand()

template<typename ArgType >
static File LibXR::RamFS::CreateCommand ( const char * name,
int(* exec )(ArgType arg, int argc, char **argv),
ArgType && arg )
inlinestatic

创建命令兼容入口,返回可执行文件 / Create a command-compatible executable file

Template Parameters
ArgType执行上下文参数类型 / Execution context argument type
Parameters
name文件名 / File name
exec执行函数 / Execution function
arg执行上下文参数 / Execution context argument
Returns
可执行文件节点 / Executable file node
Note
包含动态内存分配 / Contains dynamic memory allocation
运行期持久化语义与上面的 executable factory 相同; 命令块按当前设计默认常驻。 This follows the same lifetime-retained semantics as the executable factory above; command blocks are intentionally retained by design.

Definition at line 92 of file ramfs.hpp.

93 :

◆ CreateDir()

static Dir LibXR::RamFS::CreateDir ( const char * name)
inlinestatic

创建目录节点 / Create a directory node

Parameters
name目录名称 / Directory name
Returns
目录节点 / Directory node
Note
包含动态内存分配 / Contains dynamic memory allocation

Definition at line 105 of file ramfs.hpp.

◆ CreateFile() [1/2]

template<typename DataType >
static File LibXR::RamFS::CreateFile ( const char * name,
DataType & raw )
inlinestatic

工厂与根入口片段 / Factory and root-entry fragment

RamFS 的工厂与根入口片段 / Factory and root-entry fragment of RamFS

创建引用外部数据的文件 / Create a file referencing external data

Template Parameters
DataType外部数据类型 / External data type
Parameters
name文件名 / File name
raw外部数据引用 / External data reference
Returns
文件节点 / File node
Note
包含动态内存分配 / Contains dynamic memory allocation

Definition at line 15 of file ramfs.hpp.

23{
24 public:
32 RamFS(const char* name = "ramfs");
33

◆ CreateFile() [2/2]

template<typename ArgType >
static File LibXR::RamFS::CreateFile ( const char * name,
int(* exec )(ArgType arg, int argc, char **argv),
ArgType && arg )
inlinestatic

创建可执行文件 / Create an executable file

Template Parameters
ArgType执行上下文参数类型 / Execution context argument type
Parameters
name文件名 / File name
exec执行函数 / Execution function
arg执行上下文参数 / Execution context argument
Returns
可执行文件节点 / Executable file node
Note
包含动态内存分配 / Contains dynamic memory allocation
可执行块按当前 RamFS 设计属于初始化后常驻状态; 当前实现不提供运行期回收路径。 Executable blocks are retained for startup / lifetime registration in the current RamFS design; the implementation does not provide a runtime reclamation path for them.

Definition at line 51 of file ramfs.hpp.

55 : uint8_t
56 {
57 READ_ONLY,
59 EXEC,
60 };
61
69 static int CompareStr(const char* const& a, const char* const& b);
70
71 public:

◆ DuplicateName()

char * RamFS::DuplicateName ( const char * name)
staticprivate

复制并持有一个节点名称 / Duplicate and retain one node name

复制并持有一个节点名称 Duplicate and retain one node name

Parameters
name原始名称 / Source name
Returns
新分配的名称缓冲区 / Newly allocated name buffer
Note
当前 RamFS 通过复制名称来保证节点名在文件系统生命周期内稳定存在。 The current RamFS duplicates names so each node keeps a stable name pointer for the lifetime of the filesystem structure.
Parameters
name原始名称 / Source name
Returns
新分配的名称缓冲区;若输入为空则返回 nullptr Newly allocated name buffer; returns nullptr if the input is null

Definition at line 29 of file ramfs.cpp.

30{
31 ASSERT(name != nullptr);
32 if (name == nullptr)
33 {
34 return nullptr;
35 }
36
37 char* name_buff = new char[strlen(name) + 1];
38 strcpy(name_buff, name);
39 return name_buff;
40}

◆ FindCustom()

Custom * LibXR::RamFS::FindCustom ( const char * name)
inline

从整个 RamFS 递归查找自定义节点 / Find a custom node recursively from the RamFS root

Parameters
name节点名称 / Node name
Returns
自定义节点指针;未找到返回 nullptr / Custom node pointer, or nullptr

Definition at line 145 of file ramfs.hpp.

157{
166class RamFS
167{
168 public:
176 RamFS(const char* name = "ramfs");
177
181 enum class FsNodeType : uint8_t
182 {
183 FILE,
184 DIR,
185 CUSTOM,
186 };
187
188 class Dir;
189
190 private:
194 using Tree = RBTree<const char*>;
195
199 enum class FileType : uint8_t
200 {
201 READ_ONLY,
202 READ_WRITE,
203 EXEC,
204 };
205
213 static int CompareStr(const char* const& a, const char* const& b);
214
215 public:
219#include "fs_node.hpp"
223#include "file.hpp"
227#include "custom.hpp"
231#include "dir.hpp"
235#include "factory.hpp"
236
237 private:
247 static char* DuplicateName(const char* name);
248};
249} // namespace LibXR

◆ FindDir()

Dir * LibXR::RamFS::FindDir ( const char * name)
inline

从整个 RamFS 递归查找目录 / Find a directory recursively from the RamFS root

Parameters
name目录名 / Directory name
Returns
目录指针;未找到返回 nullptr / Directory pointer, or nullptr

Definition at line 137 of file ramfs.hpp.

149{
158class RamFS
159{
160 public:
168 RamFS(const char* name = "ramfs");
169
173 enum class FsNodeType : uint8_t
174 {
175 FILE,
176 DIR,
177 CUSTOM,
178 };
179
180 class Dir;
181
182 private:
186 using Tree = RBTree<const char*>;
187
191 enum class FileType : uint8_t
192 {
193 READ_ONLY,
194 READ_WRITE,
195 EXEC,
196 };
197
205 static int CompareStr(const char* const& a, const char* const& b);
206
207 public:
211#include "fs_node.hpp"
215#include "file.hpp"
219#include "custom.hpp"
223#include "dir.hpp"
227#include "factory.hpp"
228
229 private:
239 static char* DuplicateName(const char* name);
240};
241} // namespace LibXR

◆ FindFile()

File * LibXR::RamFS::FindFile ( const char * name)
inline

从整个 RamFS 递归查找文件 / Find a file recursively from the RamFS root

Parameters
name文件名 / File name
Returns
文件指针;未找到返回 nullptr / File pointer, or nullptr

Definition at line 130 of file ramfs.hpp.

142{
151class RamFS
152{
153 public:
161 RamFS(const char* name = "ramfs");
162
166 enum class FsNodeType : uint8_t
167 {
168 FILE,
169 DIR,
170 CUSTOM,
171 };
172
173 class Dir;
174
175 private:
179 using Tree = RBTree<const char*>;
180
184 enum class FileType : uint8_t
185 {
186 READ_ONLY,
187 READ_WRITE,
188 EXEC,
189 };
190
198 static int CompareStr(const char* const& a, const char* const& b);
199
200 public:
204#include "fs_node.hpp"
208#include "file.hpp"
212#include "custom.hpp"
216#include "dir.hpp"
220#include "factory.hpp"
221
222 private:
232 static char* DuplicateName(const char* name);
233};
234} // namespace LibXR

Field Documentation

◆ bin_

Dir LibXR::RamFS::bin_

预留的可执行文件目录 / Reserved executable-file directory.

Definition at line 149 of file ramfs.hpp.

◆ root_

Dir LibXR::RamFS::root_

根目录;所有外部 Add()/Find*() 默认都从这里进入 / Root directory; all external Add()/Find*() entry through here.

Definition at line 147 of file ramfs.hpp.


The documentation for this class was generated from the following files: