Skip to content
TypeSpecificWriter

TypeSpecificWriter

Description

Type-specific write callback signature

Usage example (Cross-references)

Usage examples (Cross-references)
                    // for literals. Fall back to a default writer.
                    if (fmt_info.flags & FMT_FLAG_CHAR) {
                        arg->writer = (TypeSpecificWriter)_write_i8;
                    } else {
                        arg->writer = (TypeSpecificWriter)_write_u64;
                        arg->writer = (TypeSpecificWriter)_write_i8;
                    } else {
                        arg->writer = (TypeSpecificWriter)_write_u64;
                    }
    #else
                // pointer to recover the source variable's natural width.
                if (fmt_info.flags & FMT_FLAG_RAW) {
                    TypeSpecificWriter write_fn  = arg->writer;
                    u32                var_width = 0;
                    if (write_fn == (void *)_write_u8 || write_fn == (void *)_write_i8) {
    ///
    typedef struct TypeSpecificIO {
        TypeSpecificWriter writer;
        TypeSpecificReader reader;
        void              *data;
    #endif
    
    static inline TypeSpecificIO TO_TYPE_SPECIFIC_IO_IMPL(TypeSpecificWriter w, TypeSpecificReader r, void *d) {
        return (TypeSpecificIO) {.writer = w, .reader = r, .data = d};
    }
    ///
    #define TO_TYPE_SPECIFIC_IO(T, d)                                                                                      \
        TO_TYPE_SPECIFIC_IO_IMPL((TypeSpecificWriter)_write_##T, (TypeSpecificReader)_read_##T, (d))
    
    ///
    #    define ZstrIO(zstr, alloc_ptr)                                                                                    \
            ((TypeSpecificIO) {                                                                                            \
                .writer = (TypeSpecificWriter)_write_ZstrAlloc,                                                            \
                .reader = (TypeSpecificReader)_read_ZstrAlloc,                                                             \
                .data   = &((ZstrIOArg) {.value = (void *)&(zstr), .allocator = (alloc_ptr)}),                             \
Last updated on