15 [[nodiscard]]
bool IsReadOnly()
const {
return file_type_ == FileType::READ_ONLY; }
21 [[nodiscard]]
bool IsReadWrite()
const {
return file_type_ == FileType::READ_WRITE; }
27 [[nodiscard]]
bool IsExecutable()
const {
return file_type_ == FileType::EXEC; }
35 int Run(
int argc,
char** argv);
50 template <
typename DataType, SizeLimitMode LimitMode = SizeLimitMode::MORE>
53 using RequestedType = std::remove_reference_t<DataType>;
54 using StoredType = std::remove_cv_t<RequestedType>;
55 static_assert(!std::is_reference_v<DataType>);
56 static_assert(!std::is_volatile_v<RequestedType>);
59 if constexpr (std::is_const_v<RequestedType>)
61 return *ReadableDataPtr<StoredType>();
65 return *WritableDataPtr<StoredType>();
77 template <
typename DataType, SizeLimitMode LimitMode = SizeLimitMode::MORE>
78 decltype(
auto)
Data()
const
80 using RequestedType = std::remove_reference_t<DataType>;
81 using StoredType = std::remove_cv_t<RequestedType>;
82 static_assert(!std::is_reference_v<DataType>);
83 static_assert(!std::is_volatile_v<RequestedType>);
86 return *ReadableDataPtr<StoredType>();
94 [[nodiscard]] RawData
Data() {
return RawData(WritableDataPtr<void>(), size_); }
100 [[nodiscard]] ConstRawData
Data()
const
102 return ConstRawData(ReadableDataPtr<void>(), size_);
109 using ExecFun = int (*)(
void* raw,
int argc,
char** argv);
121 [[noreturn]]
static void DataAccessPanic()
133 template <
typename DataType>
134 const DataType* ReadableDataPtr()
const
136 if (file_type_ == FileType::READ_WRITE)
138 return static_cast<const DataType*
>(
addr_);
140 if (file_type_ == FileType::READ_ONLY)
153 template <
typename DataType>
154 DataType* WritableDataPtr()
156 if (file_type_ != FileType::READ_WRITE)
160 return static_cast<DataType*
>(
addr_);
172 explicit File(
const char* name);
188 void* arg_ =
nullptr;
190 FileType file_type_ =
RamFS 的文件节点片段 / File-node fragment of RamFS
const void * addr_const_
只读数据地址 / Read-only payload address.
int Run(int argc, char **argv)
执行可执行文件 / Run an executable file
void * addr_
可写数据地址 / Writable payload address.
bool IsExecutable() const
判断文件是否可执行 / Check whether the file is executable
bool IsReadWrite() const
判断文件是否可写 / Check whether the file is writable
decltype(auto) Data()
访问类型化数据 / Access typed data
ConstRawData Data() const
访问只读原始数据 / Access read-only raw data
ExecFun exec_
可执行入口函数 / Executable entry function.
bool IsReadOnly() const
判断文件是否只读 / Check whether the file is read-only
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
RamFS 的公共节点基类片段 / Common node-base fragment of RamFS
constexpr bool SizeLimitCheck(SizeLimitMode mode, size_t limit, size_t size) noexcept
尺寸约束的纯判断函数 / Pure predicate for size-limit comparisons