#ifndef __SMCC_CORE_STREAM_H__ #define __SMCC_CORE_STREAM_H__ #include "core_impl.h" #include "core_macro.h" #include "core_mem.h" #include "core_str.h" struct core_stream; 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__ */