#ifndef KIT_INPUT_STREAM_H #define KIT_INPUT_STREAM_H #include "allocator.h" #include "string_ref.h" #include #ifdef __cplusplus extern "C" { #endif typedef i64 (*kit_is_read_fn)(void *state, kit_str_t destination); typedef struct { void *state; kit_is_read_fn read; } kit_is_handle_t; kit_is_handle_t kit_is_wrap_string(kit_str_t string, kit_allocator_t *alloc); kit_is_handle_t kit_is_wrap_file(FILE *f, kit_allocator_t *alloc); void kit_is_destroy(kit_is_handle_t in); #define KIT_IS_WRAP_STRING(string) kit_is_wrap_string((string), NULL) #define KIT_IS_WRAP_FILE(f) kit_is_wrap_file((f), NULL) #define KIT_IS_READ(in, destination) \ (in).read((in).state, (destination)) #ifdef __cplusplus } #endif #define is_read_fn kit_is_read_fn #define is_handle_t kit_is_handle_t #define is_wrap_string kit_is_wrap_string #define is_wrap_file kit_is_wrap_file #define is_destroy kit_is_destroy #define IS_WRAP_STRING KIT_IS_WRAP_STRING #define IS_WRAP_FILE KIT_IS_WRAP_FILE #define IS_READ KIT_IS_READ #endif