TypeSpecificIO
TypeSpecificIO
Description
Create TypeSpecificIO for type T
Parameters
| Name | Direction | Description |
|---|---|---|
T |
in | Type specifier |
d |
in | Data pointer |
Success
Returns initialized TypeSpecificIO structure
Failure
Function cannot fail - compile-time operation
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Io.c:242:
}
bool StrWriteFmtInternal(Str *o, const char *fmt, TypeSpecificIO *args, u64 argc) {
if (!o || !fmt) {
LOG_FATAL("Invalid arguments");- In
Io.c:294:
// Get current argument
TypeSpecificIO *arg = &args[arg_idx++];
if (!arg->writer || !arg->data) {
#if defined(_MSC_VER) || defined(__MSC_VER)- In
Io.c:420:
}
const char *StrReadFmtInternal(const char *input, const char *fmtstr, TypeSpecificIO *argv, u64 argc) {
if (!input || !fmtstr) {
LOG_FATAL("Invalid arguments");- In
Io.c:494:
// Use the type-specific reader
TypeSpecificIO *io = &argv[arg_index++];
if (!io->reader) {
LOG_ERROR("Missing reader function");- In
Io.c:645:
}
void FReadFmtInternal(FILE *file, const char *fmtstr, TypeSpecificIO *argv, u64 argc) {
if (!file || !fmtstr) {
LOG_FATAL("Invalid arguments");- In
Io.h:118:
TypeSpecificReader reader;
void *data;
} TypeSpecificIO;
#ifdef __cplusplus- In
Io.h:121:
#ifdef __cplusplus
# define EMPTY_TYPE_SPECIFIC_IO() (TypeSpecificIO {NULL, NULL, NULL})
#else
# define EMPTY_TYPE_SPECIFIC_IO() ((TypeSpecificIO) {NULL, NULL, NULL})- In
Io.h:123:
# define EMPTY_TYPE_SPECIFIC_IO() (TypeSpecificIO {NULL, NULL, NULL})
#else
# define EMPTY_TYPE_SPECIFIC_IO() ((TypeSpecificIO) {NULL, NULL, NULL})
#endif- In
Io.h:126:
#endif
static inline TypeSpecificIO TO_TYPE_SPECIFIC_IO_IMPL(TypeSpecificWriter w, TypeSpecificReader r, void *d) {
return (TypeSpecificIO) {.writer = w, .reader = r, .data = d};
}- In
Io.h:127:
static inline TypeSpecificIO TO_TYPE_SPECIFIC_IO_IMPL(TypeSpecificWriter w, TypeSpecificReader r, void *d) {
return (TypeSpecificIO) {.writer = w, .reader = r, .data = d};
}- In
Io.h:137:
_Generic( \
(x), \
TypeSpecificIO: (x), \
Str: TO_TYPE_SPECIFIC_IO(Str, &(x)), \
Float: TO_TYPE_SPECIFIC_IO(Float, &(x)), \
- In
Io.h:173:
_Generic( \
(x), \
TypeSpecificIO: (x), \
Str: TO_TYPE_SPECIFIC_IO(Str, (void *)&(x)), \
Float: TO_TYPE_SPECIFIC_IO(Float, (void *)&(x)), \
- In
Io.h:220:
/// TAGS: Formatting, I/O, String
///
bool StrWriteFmtInternal(Str *o, const char *fmt, TypeSpecificIO *args, u64 argc);
///
- In
Io.h:245:
/// TAGS: Formatting, I/O, Parsing
///
const char *StrReadFmtInternal(const char *input, const char *fmtstr, TypeSpecificIO *argv, u64 argc);
///
- In
Io.h:263:
/// TAGS: Formatting, I/O, File
///
void FReadFmtInternal(FILE *stream, const char *fmtstr, TypeSpecificIO *argv, u64 argc);
///
- In
Io.h:300:
input, \
fmtstr, \
((TypeSpecificIO[]) { \
APPLY_MACRO_FOREACH(IOFMT_LVAL_APPEND_COMMA, __VA_ARGS__) {NULL, NULL, NULL} \
}) \
- In
Io.h:306:
#define StrWriteFmt_IMPL2(input, fmtstr, varr) \
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO); \
StrWriteFmtInternal((input), (fmtstr), argv_, argc_ - 1); \- In
Io.h:307:
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO); \
StrWriteFmtInternal((input), (fmtstr), argv_, argc_ - 1); \
} while (0)- In
Io.h:354:
input, \
fmtstr, \
((TypeSpecificIO[]) { \
APPLY_MACRO_FOREACH(IOFMT_APPEND_COMMA, __VA_ARGS__) {NULL, NULL, NULL} \
}) \
- In
Io.h:360:
#define StrReadFmt_IMPL2(input, fmtstr, varr) \
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
char **_p_input_ = (char **)(&(input)); \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO); \- In
Io.h:362:
TypeSpecificIO *argv_ = &(varr)[0]; \
char **_p_input_ = (char **)(&(input)); \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO); \
const char *_input_ = StrReadFmtInternal((const char *)*(_p_input_), (fmtstr), argv_, argc_ - 1); \
(*_p_input_) = (char *)(_input_) ? (char *)(_input_) : (*_p_input_); \
- In
Io.h:389:
file, \
fmtstr, \
((TypeSpecificIO[]) { \
APPLY_MACRO_FOREACH(IOFMT_APPEND_COMMA, __VA_ARGS__) {NULL, NULL, NULL} \
}) \
- In
Io.h:395:
#define FReadFmt_IMPL2(file, fmtstr, varr) \
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO) - 1; \
FReadFmtInternal((file), (fmtstr), argv_, argc_); \- In
Io.h:396:
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO) - 1; \
FReadFmtInternal((file), (fmtstr), argv_, argc_); \
} while (0)- In
Io.h:422:
stream, \
fmtstr, \
((TypeSpecificIO[]) { \
APPLY_MACRO_FOREACH(IOFMT_LVAL_APPEND_COMMA, __VA_ARGS__) {NULL, NULL, NULL} \
}) \
- In
Io.h:428:
#define FWriteFmt_IMPL2(stream, fmtstr, varr) \
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO) - 1; \
Str out_ = StrInit(); \- In
Io.h:429:
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO) - 1; \
Str out_ = StrInit(); \
StrWriteFmtInternal(&out_, (fmtstr), argv_, argc_); \
- In
Io.h:460:
stream, \
fmtstr, \
((TypeSpecificIO[]) { \
APPLY_MACRO_FOREACH(IOFMT_LVAL_APPEND_COMMA, __VA_ARGS__) {NULL, NULL, NULL} \
}) \
- In
Io.h:466:
#define FWriteFmtLn_IMPL2(stream, fmtstr, varr) \
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO) - 1; \
Str out_ = StrInit(); \- In
Io.h:467:
do { \
TypeSpecificIO *argv_ = &(varr)[0]; \
u64 argc_ = sizeof(varr) / sizeof(TypeSpecificIO) - 1; \
Str out_ = StrInit(); \
StrWriteFmtInternal(&out_, (fmtstr), argv_, argc_); \
Last updated on