smcc/lib/rt/std/rt_api_def.h
ZZY 8d97fe896c chore: 更新 .gitignore 文件
- 添加 docs 文件夹到忽略列表,以忽略 Doxygen 生成的文件
- 保持原有的忽略规则不变
2025-04-05 23:11:39 +08:00

184 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file rt_api_def.h
* @brief SMCC运行时库接口定义
*
* 定义运行时基础API函数指针类型及运行时接口结构体
*/
#ifndef __SMCC_RT_API_DEF_H__
#define __SMCC_RT_API_DEF_H__
#include "rt_type.h"
#ifndef __RT_SIZE_TYPE__
#define __RT_SIZE_TYPE__
/**
* @typedef rt_size_t
* @brief 表示内存大小的类型定义
*/
typedef usz_t rt_size_t;
#endif
/**
* @typedef rt_malloc
* @brief 内存分配函数指针类型
* @param size 需要分配的内存大小
* @return 分配的内存指针失败返回NULL
*/
typedef void* (*rt_malloc)(rt_size_t size);
/**
* @typedef rt_free
* @brief 内存释放函数指针类型
* @param ptr 需要释放的内存指针
*/
typedef void (*rt_free)(void* ptr);
/**
* @typedef rt_exit
* @brief 程序退出函数指针类型
* @param code 退出状态码
*/
typedef void (*rt_exit)(int code);
/** @defgroup file_io 文件I/O相关类型 */
#ifndef __RT_FILE_TYPE__
#define __RT_FILE_TYPE__
/**
* @typedef rt_file_t
* @brief 文件句柄类型定义
*/
typedef void* rt_file_t;
#endif
/** @brief 标准输入文件句柄 */
extern rt_file_t rt_stdin;
/** @brief 标准输出文件句柄 */
extern rt_file_t rt_stdout;
/** @brief 标准错误文件句柄 */
extern rt_file_t rt_stderr;
/**
* @typedef rt_fopen_t
* @brief 文件打开函数指针类型
* @param file_name 文件名
* @param mode 打开模式同fopen
* @return 文件句柄失败返回NULL
*/
typedef rt_file_t (*rt_fopen_t)(const char* file_name, const char* mode);
/**
* @typedef rt_fflush_t
* @brief 文件缓冲刷新函数指针类型
* @param file 文件句柄指针
* @return 成功返回0失败返回非0值
*/
typedef int (*rt_fflush_t)(rt_file_t* file);
/**
* @typedef rt_fclose_t
* @brief 文件关闭函数指针类型
* @param file 文件句柄
* @return 成功返回0失败返回EOF
*/
typedef int (*rt_fclose_t)(rt_file_t file);
/**
* @typedef rt_fread_t
* @brief 文件读取函数指针类型
* @param dst_buf 目标缓冲区
* @param elem_size 单个元素大小
* @param count 元素数量
* @param file 文件句柄
* @return 实际读取的元素数量
*/
typedef int (*rt_fread_t)(void * dst_buf, rt_size_t elem_size, rt_size_t count, rt_file_t file);
/**
* @typedef rt_fwrite_t
* @brief 文件写入函数指针类型
* @param buf 源缓冲区
* @param size 单个元素大小
* @param count 元素数量
* @param file 文件句柄
* @return 实际写入的元素数量
*/
typedef int (*rt_fwrite_t)(const void * buf, rt_size_t size, rt_size_t count, rt_file_t file);
/** @defgroup utility 实用工具函数 */
/**
* @typedef rt_fprintf_t
* @brief 格式化输出函数指针类型
* @param file 文件句柄
* @param format 格式化字符串
* @param ... 可变参数
* @return 输出的字符数
*/
typedef int (*rt_fprintf_t)(void * file, const char *format, ...);
/**
* @typedef rt_snprintf_t
* @brief 安全格式化字符串函数指针类型
* @param stream 目标缓冲区
* @param n 缓冲区大小
* @param format 格式化字符串
* @param ... 可变参数
* @return 写入的字符数(不含终止符)
*/
typedef int (*rt_snprintf_t)(char * stream, rt_size_t n, const char * format, ...);
/**
* @typedef rt_realloc_t
* @brief 内存重分配函数指针类型
* @param memory 原内存指针
* @param new_size 新内存大小
* @return 新内存指针失败返回NULL
*/
typedef void* (*rt_realloc_t)(void *memory, rt_size_t new_size);
/**
* @struct smcc_rt_t
* @brief 运行时接口集合
*
* 包含内存管理、文件操作等核心运行时函数的指针集合
*/
typedef struct smcc_rt {
/** @brief 内存分配函数指针 */
rt_malloc _malloc;
/** @brief 内存释放函数指针 */
rt_free _free;
/** @brief 程序退出函数指针 */
rt_exit exit;
/** @brief 文件打开函数指针 */
rt_fopen_t fopen;
/** @brief 文件缓冲刷新函数指针 */
rt_fflush_t fflush;
/** @brief 文件关闭函数指针 */
rt_fclose_t fclose;
/** @brief 文件读取函数指针 */
rt_fread_t fread;
/** @brief 文件写入函数指针 */
rt_fwrite_t fwrite;
/** @name 可选工具函数 */
///@{
/** @brief 格式化输出函数指针(可选) */
rt_fprintf_t fprintf;
/** @brief 安全格式化字符串函数指针(可选) */
rt_snprintf_t snprintf;
/** @brief 内存重分配函数指针(可选) */
rt_realloc_t _realloc;
///@}
} smcc_rt_t;
/** @brief 全局运行时接口实例 */
extern const smcc_rt_t rt;
/** @brief 空指针定义 */
#define NULL ((void *)0)
#endif // __SMCC_RT_API_DEF_H__