#ifndef __SMCC_CORE_STREAM_H__ #define __SMCC_CORE_STREAM_H__ #include "core_impl.h" #include "core_mem.h" #include "core_str.h" #include "core_macro.h" typedef struct core_stream core_stream_t; #define core_stream_eof (-1) struct core_stream { cstring_t name; /// @brief 读取指定数量的字符到缓冲区 usize (*read_buf)(core_stream_t* stream, char* buffer, usize count); /// @brief 获取下一个字符 int (*peek_char)(core_stream_t* stream); /// @brief 重置字符流位置 void (*reset_char) (core_stream_t* stream); /// @brief 读取并消费下一个字符(移动流位置) int (*next_char)(core_stream_t* stream); /// @brief 释放资源 void (*free_stream) (core_stream_t* steam); }; static inline usize core_stream_read_buf(core_stream_t* self, char* buffer, usize count) { return self->read_buf(self, buffer, count); } static inline int core_stream_peek_char(core_stream_t* self) { return self->peek_char(self); } static inline void core_stream_reset_char(core_stream_t* self) { self->reset_char(self); } static inline int core_stream_next_char(core_stream_t* self) { return self->next_char(self); } static inline void core_stream_free_stream(core_stream_t* self) { self->free_stream(self); } #ifndef __SMCC_CORE_NO_MEM_STREAM__ typedef struct core_mem_stream { core_stream_t stream; const char* data; usize data_length; usize curr_pos; usize peek_pos; cbool owned; } core_mem_stream_t; core_stream_t* core_mem_stream_init(core_mem_stream_t* stream, const char* data, usize length, cbool need_copy); #endif #endif /* __SMCC_CORE_STREAM_H__ */