184 lines
4.7 KiB
C
184 lines
4.7 KiB
C
/**
|
||
* @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__
|