Skip to content
StrReadFmtInternal

StrReadFmtInternal

StrReadFmtInternal

Description

Parse input string according to format string with rust-style placeholders, extracting values into provided TypeSpecificIO arguments.

Takes in TypeSpecificIO structures as arguments. Use . to wrap any supported-type variable to its TypeSpecificIO object.

Parameters

Name Direction Description
input in Input string to parse (null-terminated)
fmtstr in Format string with placeholders (null-terminated)
argv in Arguments that will be read into from placeholders.
argc in Number of arguments.

Usage example (from documentation)

  const char *input = "Count: 42, Name: Alice";
  int count;
  Str name;
  const char *remaining = StrReadFmt(input, "Count: {}, Name: {}", count, name);

Success

After reading through input, returns back const char* to start reading from (from inside input)

Failure

Returns NULL if fmtstr does not match with input. In any other case of error, does not return.

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    const char *StrReadFmtInternal(const char *input, const char *fmtstr, TypeSpecificIO *argv, u64 argc) {
        if (!input || !fmtstr) {
            LOG_FATAL("Invalid arguments");
                StrPushBack(&buffer, in);
            }
            StrReadFmtInternal(buffer.data, fmtstr, argv, argc);
        } else {
            fpos_t start_pos;
            if (buffer.length) {
                const char *new_pos = NULL;
                if (!(new_pos = StrReadFmtInternal(buffer.data, fmtstr, argv, argc))) {
                    if (can_rollback) {
                        LOG_ERROR("Parse failed, rolling back...");
            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_);                              \
        } while (0)
Last updated on