VecForeachPtr
Description
Walk each element of v forward, binding var to a pointer to the element. Use when the body mutates elements in place. Convenience wrapper around VecForeachPtrIdx. See VecForeachPtrIdx for the full SUCCESS/FAILURE contract.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
ArgParse.c:239:
static ArgSpec *find_long(ArgParse *self, Zstr long_name) {
VecForeachPtr(&self->specs, sp) {
if (sp->role == ARG_ROLE_POSITIONAL)
continue;- In
ArgParse.c:249:
static ArgSpec *find_short(ArgParse *self, Zstr short_name) {
VecForeachPtr(&self->specs, sp) {
if (sp->role == ARG_ROLE_POSITIONAL)
continue;- In
ArgParse.c:331:
bool any_option = false;
VecForeachPtr(&self->specs, sp) {
if (sp->role == ARG_ROLE_OPTIONAL || sp->role == ARG_ROLE_FLAG || sp->role == ARG_ROLE_COUNT) {
any_option = true;- In
ArgParse.c:340:
StrPushBackMany(&usage, " [OPTIONS]");
VecForeachPtr(&self->specs, sp) {
if (sp->role != ARG_ROLE_REQUIRED)
continue;- In
ArgParse.c:352:
StrPushBackR(&usage, '>');
}
VecForeachPtr(&self->specs, sp) {
if (sp->role != ARG_ROLE_POSITIONAL)
continue;- In
ArgParse.c:628:
// and Run without seeing the synthetic entry first.
bool already_has_help = false;
VecForeachPtr(&self->specs, sp) {
if (zstr_eq(sp->long_name, "--help")) {
already_has_help = true;- In
ArgParse.c:654:
// accurate even on the first overflow token.
u64 n_positionals = 0;
VecForeachPtr(&self->specs, sp) {
if (sp->role == ARG_ROLE_POSITIONAL)
++n_positionals;- In
ArgParse.c:727:
u64 seen = 0;
ArgSpec *pos = NULL;
VecForeachPtr(&self->specs, sp) {
if (sp->role != ARG_ROLE_POSITIONAL)
continue;- In
ArgParse.c:756:
// Validate required / positional were all set.
VecForeachPtr(&self->specs, sp) {
if ((sp->role == ARG_ROLE_REQUIRED || sp->role == ARG_ROLE_POSITIONAL) && !sp->seen) {
if (sp->role == ARG_ROLE_POSITIONAL) {- In
Str.c:1154:
void ValidateStrs(const Strs *vs) {
ValidateVec(vs);
VecForeachPtr(vs, sp) {
ValidateStr(sp);
}- In
Dns.c:337:
// call into the validator.
if (VecBegin(&self->hosts)) {
VecForeachPtr(&self->hosts, e) {
StrDeinit(&e->name);
}- In
Dns.c:467:
bool found = false;
VecForeachPtr(&resp.answers, rec) {
if (rec->type == qtype) {
SocketAddr a = qtype == DNS_TYPE_A ? sockaddr_v4(rec->ipv4, port) : sockaddr_v6(rec->ipv6, port);- In
Dns.c:502:
// 1. /etc/hosts fast path.
VecForeachPtr(&self->hosts, e) {
if (StrLen(&e->name) > 0 && ZstrCompare(StrBegin(&e->name), nq) == 0) {
SocketAddr a = e->is_ipv6 ? sockaddr_v6(e->ip, port) : sockaddr_v4(e->ip, port);- In
Dns.c:523:
DnsType qtype = QUERY_TYPES[i];
// Iterate nameservers; each gets up to `retries` attempts.
VecForeachPtr(&self->nameservers, ns) {
for (u32 attempt = 0; attempt < self->retries + 1; ++attempt) {
if (try_one_query(self, ns, nq, qtype, port, out)) {- In
Http.c:62:
LOG_FATAL("invalid arguments");
}
VecForeachPtr(headers, header) {
if (0 == ZstrCompare(StrBegin(&header->key), key)) {
return header;- In
Http.c:481:
);
VecForeachPtr(&response->headers, header) {
StrAppendFmt(&out, "{}: {}\r\n", header->key, header->value);
}- In
Dns.c:333:
return;
}
VecForeachPtr(list, r) {
DnsRecordDeinit(r);
}- In
Resolve.c:44:
}
VecForeachPtr(&addrs, a) {
Str s = SocketAddrFormat(a, alloc);
// Strip the trailing ":0" since we resolve with port=0; keep
- In
VecCharPtr.c:518:
if (VecLen(vec) > 0) {
size_t total_len = 0;
VecForeachPtr(vec, str_ptr) {
total_len += ZstrLen(*str_ptr);
}- In
VecStr.c:496:
if (VecLen(vec) > 0) {
size_t total_len = 0;
VecForeachPtr(vec, str_ptr) {
total_len += StrLen(str_ptr);
}- In
VecInt.c:429:
if (VecLen(vec) > 0) {
int sum = 0;
VecForeachPtr(vec, item_ptr) {
sum += *item_ptr;
}- In
SysDns.c:30:
bool found_v4 = false;
if (got) {
VecForeachPtr(&out, ad) {
if (ad->family == SOCKET_FAMILY_INET) {
found_v4 = true;- In
SysDns.c:143:
bool ok = got && VecLen(&out) > 0;
if (ok) {
VecForeachPtr(&out, ad) {
Str s = SocketAddrFormat(ad, a);
u64 L = StrLen(&s); // Test VecForeachPtr macro
bool test_vec_foreach_ptr(void) {
WriteFmt("Testing VecForeachPtr\n");
// Create a vector of integers
// Use VecForeachPtr to modify the values in the vector
VecForeachPtr(&vec, item_ptr) {
*item_ptr *= 2;
} // Use VecForeachPtr to calculate sum
int sum = 0;
VecForeachPtr(&vec, item_ptr) {
sum += *item_ptr;
}- In
Foreach.h:84:
/// TAGS: Str, Foreach, Iterate
///
#define StrForeachPtr(str, chrptr) VecForeachPtr((str), (chrptr))
///
Last updated on