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

内存文件或可执行文件 / Memory file or executable file More...

#include <ramfs.hpp>

Inheritance diagram for LibXR::RamFS::File:
[legend]
Collaboration diagram for LibXR::RamFS::File:
[legend]

Public Member Functions

bool IsReadOnly () const
 判断文件是否只读 / Check whether the file is read-only
 
bool IsReadWrite () const
 判断文件是否可写 / Check whether the file is writable
 
bool IsExecutable () const
 判断文件是否可执行 / Check whether the file is executable
 
int Run (int argc, char **argv)
 执行可执行文件 / Run an executable file
 
template<typename DataType , SizeLimitMode LimitMode = SizeLimitMode::MORE>
decltype(auto) Data ()
 访问类型化数据 / Access typed data
 
template<typename DataType , SizeLimitMode LimitMode = SizeLimitMode::MORE>
decltype(auto) Data () const
 从 const 文件对象访问类型化只读数据 / Access typed read-only data from a const file object
 
RawData Data ()
 访问可写原始数据,要求文件为 READ_WRITE / Access writable raw data; requires READ_WRITE
 
ConstRawData Data () const
 访问只读原始数据 / Access read-only raw data
 
- Public Member Functions inherited from LibXR::RamFS::FsNode
FsNodeType GetNodeType () const
 获取节点类型 / Get the node type
 
const char * GetName () const
 获取节点名称 / Get the node name
 

Private Types

using ExecFun = int (*)(void* raw, int argc, char** argv)
 

Private Member Functions

 File (const char *name)
 

Private Attributes

union { 
 
   void *   addr_ 
 
   const void *   addr_const_ 
 
   ExecFun   exec_ 
 
};  
 
void * arg_ = nullptr
 
size_t size_ = 0
 
FileType file_type_ = FileType::READ_ONLY
 

Friends

class RamFS
 

Additional Inherited Members

- Protected Member Functions inherited from LibXR::RamFS::FsNode
 FsNode (FsNodeType node_type)
 
 FsNode (const FsNode &other)
 
FsNodeoperator= (const FsNode &)=delete
 
- Protected Attributes inherited from LibXR::RamFS::FsNode
const char * name_ = nullptr
 
FsNodeType type_
 
Dirparent_ = nullptr
 
Tree::Node< FsNode * > tree_node_
 

Detailed Description

内存文件或可执行文件 / Memory file or executable file

Definition at line 94 of file ramfs.hpp.

Member Typedef Documentation

◆ ExecFun

using LibXR::RamFS::File::ExecFun = int (*)(void* raw, int argc, char** argv)
private

Definition at line 228 of file ramfs.hpp.

Constructor & Destructor Documentation

◆ File() [1/2]

RamFS::File::File ( )
private

Definition at line 29 of file ramfs.cpp.

29: FsNode(FsNodeType::FILE), addr_(nullptr), arg_(nullptr), size_(0) {}

◆ File() [2/2]

RamFS::File::File ( const char * name)
explicitprivate

Definition at line 31 of file ramfs.cpp.

31: File() { this->name_ = DuplicateName(name); }

Member Function Documentation

◆ Data() [1/4]

template<typename DataType , SizeLimitMode LimitMode = SizeLimitMode::MORE>
decltype(auto) LibXR::RamFS::File::Data ( )
inline

访问类型化数据 / Access typed data

Data<T>() 返回可写引用并要求 READ_WRITE / Data<T>() returns a writable reference and requires READ_WRITE. Data<const T>() 返回只读引用 / Data<const T>() returns a read-only reference for both READ_ONLY and READ_WRITE.

Template Parameters
DataType数据类型;使用 const T 表示只读访问 / Data type; use const T for read-only access.
LimitMode大小检查模式 / Size-check mode
Returns
类型化数据引用 / Typed data reference

Definition at line 137 of file ramfs.hpp.

138 {
139 using RequestedType = std::remove_reference_t<DataType>;
140 using StoredType = std::remove_cv_t<RequestedType>;
141 static_assert(!std::is_reference_v<DataType>);
142 static_assert(!std::is_volatile_v<RequestedType>);
143
144 ASSERT(LibXR::SizeLimitCheck(LimitMode, sizeof(StoredType), size_));
145 if constexpr (std::is_const_v<RequestedType>)
146 {
147 if (file_type_ == FileType::READ_WRITE)
148 {
149 return *static_cast<const StoredType*>(addr_);
150 }
151 if (file_type_ == FileType::READ_ONLY)
152 {
153 return *static_cast<const StoredType*>(addr_const_);
154 }
155
156 ASSERT(false);
157 const void* null_data = nullptr;
158 return *static_cast<const StoredType*>(null_data);
159 }
160 else
161 {
162 ASSERT(file_type_ == FileType::READ_WRITE);
163 return *static_cast<StoredType*>(addr_);
164 }
165 }
constexpr bool SizeLimitCheck(SizeLimitMode mode, size_t limit, size_t size) noexcept
尺寸约束的纯判断函数

◆ Data() [2/4]

RawData LibXR::RamFS::File::Data ( )
inlinenodiscard

访问可写原始数据,要求文件为 READ_WRITE / Access writable raw data; requires READ_WRITE

Returns
可写原始数据视图 / Writable raw data view

Definition at line 203 of file ramfs.hpp.

204 {
205 ASSERT(file_type_ == FileType::READ_WRITE);
206 return RawData(addr_, size_);
207 }

◆ Data() [3/4]

template<typename DataType , SizeLimitMode LimitMode = SizeLimitMode::MORE>
decltype(auto) LibXR::RamFS::File::Data ( ) const
inline

从 const 文件对象访问类型化只读数据 / Access typed read-only data from a const file object

Template Parameters
DataType数据类型 / Data type
LimitMode大小检查模式 / Size-check mode
Returns
类型化只读数据引用 / Typed read-only data reference

Definition at line 176 of file ramfs.hpp.

177 {
178 using RequestedType = std::remove_reference_t<DataType>;
179 using StoredType = std::remove_cv_t<RequestedType>;
180 static_assert(!std::is_reference_v<DataType>);
181 static_assert(!std::is_volatile_v<RequestedType>);
182
183 ASSERT(LibXR::SizeLimitCheck(LimitMode, sizeof(StoredType), size_));
184 if (file_type_ == FileType::READ_WRITE)
185 {
186 return *static_cast<const StoredType*>(addr_);
187 }
188 if (file_type_ == FileType::READ_ONLY)
189 {
190 return *static_cast<const StoredType*>(addr_const_);
191 }
192
193 ASSERT(false);
194 const void* null_data = nullptr;
195 return *static_cast<const StoredType*>(null_data);
196 }

◆ Data() [4/4]

ConstRawData LibXR::RamFS::File::Data ( ) const
inlinenodiscard

访问只读原始数据 / Access read-only raw data

Returns
只读原始数据视图 / Read-only raw data view

Definition at line 213 of file ramfs.hpp.

214 {
215 if (file_type_ == FileType::READ_WRITE)
216 {
217 return ConstRawData(addr_, size_);
218 }
219 if (file_type_ == FileType::READ_ONLY)
220 {
221 return ConstRawData(addr_const_, size_);
222 }
223 ASSERT(false);
224 return ConstRawData();
225 }

◆ IsExecutable()

bool LibXR::RamFS::File::IsExecutable ( ) const
inlinenodiscard

判断文件是否可执行 / Check whether the file is executable

Returns
可执行返回 true / True if the file is executable

Definition at line 113 of file ramfs.hpp.

113{ return file_type_ == FileType::EXEC; }

◆ IsReadOnly()

bool LibXR::RamFS::File::IsReadOnly ( ) const
inlinenodiscard

判断文件是否只读 / Check whether the file is read-only

Returns
只读返回 true / True if the file is read-only

Definition at line 101 of file ramfs.hpp.

101{ return file_type_ == FileType::READ_ONLY; }

◆ IsReadWrite()

bool LibXR::RamFS::File::IsReadWrite ( ) const
inlinenodiscard

判断文件是否可写 / Check whether the file is writable

Returns
可写返回 true / True if the file is writable

Definition at line 107 of file ramfs.hpp.

107{ return file_type_ == FileType::READ_WRITE; }

◆ Run()

int RamFS::File::Run ( int argc,
char ** argv )

执行可执行文件 / Run an executable file

Parameters
argc参数数量 / Argument count
argv参数数组 / Argument vector
Returns
执行返回值 / Execution return value

Definition at line 33 of file ramfs.cpp.

34{
35 ASSERT(file_type_ == FileType::EXEC);
36 ASSERT(exec_ != nullptr);
37 return exec_(arg_, argc, argv);
38}

Friends And Related Symbol Documentation

◆ RamFS

friend class RamFS
friend

Definition at line 244 of file ramfs.hpp.

Field Documentation

◆ addr_

void* LibXR::RamFS::File::addr_

Definition at line 235 of file ramfs.hpp.

◆ addr_const_

const void* LibXR::RamFS::File::addr_const_

Definition at line 236 of file ramfs.hpp.

◆ arg_

void* LibXR::RamFS::File::arg_ = nullptr
private

Definition at line 240 of file ramfs.hpp.

◆ exec_

ExecFun LibXR::RamFS::File::exec_

Definition at line 237 of file ramfs.hpp.

◆ file_type_

FileType LibXR::RamFS::File::file_type_ = FileType::READ_ONLY
private

Definition at line 242 of file ramfs.hpp.

◆ size_

size_t LibXR::RamFS::File::size_ = 0
private

Definition at line 241 of file ramfs.hpp.


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