VecBegin
Description
Pointer to the first element of the vector. Equivalent to v->data.
Parameters
| Name | Direction | Description |
|---|---|---|
v |
in | Vector to query. |
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Backtrace.c:274:
if (!out || !frames)
return;
format_walk_win(out, VecBegin(frames), VecLen(frames), alloc);
}- In
Backtrace.c:436:
if (!out || !frames || !alloc)
return;
format_walk_mac(out, VecBegin(frames), VecLen(frames), alloc);
}- In
Backtrace.c:514:
if (!out || !frames || !resolver)
return;
format_walk_with(out, VecBegin(frames), VecLen(frames), resolver);
}- In
Backtrace.c:526:
if (!out || !frames || !alloc)
return;
format_walk_alloc(out, VecBegin(frames), VecLen(frames), alloc);
}- In
Dns.c:336:
// down. `VecBegin` is a `NULL`-safe field read that does not
// call into the validator.
if (VecBegin(&self->hosts)) {
VecForeachPtr(&self->hosts, e) {
StrDeinit(&e->name);- In
Dns.c:342:
VecDeinit(&self->hosts);
}
if (VecBegin(&self->nameservers)) {
VecDeinit(&self->nameservers);
}- In
Dns.c:449:
u8 resp_buf[1232]; // safe UDP payload (avoids IP fragmentation)
i64 got = udp_round_trip(ns, VecBegin(&query), VecLen(&query), resp_buf, sizeof(resp_buf), self->timeout_ms);
VecDeinit(&query);
if (got <= 0) {- In
Pdb.c:329:
bool ok = false;
VecInitStack(u8, buf, 28) {
if (!stream_read(self, 1, 0, VecBegin(&buf), VecCapacity(&buf)))
break;
BufIter bi = BufIterFromMemory(VecBegin(&buf), VecCapacity(&buf));- In
Pdb.c:331:
if (!stream_read(self, 1, 0, VecBegin(&buf), VecCapacity(&buf)))
break;
BufIter bi = BufIterFromMemory(VecBegin(&buf), VecCapacity(&buf));
if (!BufReadFmt(&bi, FMT_PDB_INFO_LE, self->info.version, self->info.signature, self->info.age)) {
LOG_ERROR("PDB: info stream prefix truncated");- In
Pdb.c:336:
break;
}
MemCopy(self->info.guid, VecBegin(&buf) + 12, 16);
ok = true;
}- In
Pdb.c:372:
u16 global_idx = 0, build_num = 0, public_idx = 0, pdb_dll_ver = 0, pdb_dll_rbld = 0, flags = 0, machine = 0;
VecInitStack(u8, hdr, DBI_HEADER_SIZE) {
if (!stream_read(self, DBI_STREAM_INDEX, 0, VecBegin(&hdr), VecCapacity(&hdr)))
break;- In
Pdb.c:375:
break;
BufIter bi = BufIterFromMemory(VecBegin(&hdr), VecCapacity(&hdr));
if (!BufReadFmt(
&bi,- In
Pdb.c:432:
VecInitStack(u8, sh, 2) {
if (!stream_read(self, DBI_STREAM_INDEX, sec_hdr_off, VecBegin(&sh), 2))
break;
r.section_hdr_stream = (u16)VecAt(&sh, 0) | (u16)VecAt(&sh, 1) << 8;- In
Dns.c:330:
static void deinit_record_list(DnsRecords *list) {
if (!list || !VecBegin(list)) {
return;
}- In
VecCharPtr.c:376:
case VEC_CHAR_PTR_BEGIN : {
if (VecLen(vec) > 0) {
char **begin = VecBegin(vec);
(void)begin; // Use the result to avoid warnings
}- In
VecStr.c:364:
case VEC_STR_BEGIN : {
if (VecLen(vec) > 0) {
Str *begin = VecBegin(vec);
(void)begin; // Use the result to avoid warnings
}- In
VecInt.c:312:
case VEC_INT_BEGIN : {
volatile i32 *begin_ptr = VecBegin(vec);
(void)begin_ptr;
break;- In
Graph.Type.c:24:
// every internal cursor / table empty.
bool result = GraphNodeCount(&graph) == 0 && GraphEdgeCount(&graph) == 0 && GraphEmpty(&graph) &&
VecBegin(&graph.slots) == NULL && VecBegin(&graph.free_indices) == NULL &&
VecBegin(&graph.pending_edge_removals) == NULL && GraphCopyInit(&graph) == NULL &&
GraphCopyDeinit(&graph) == NULL && graph.pending_delete_count == 0 &&- In
Graph.Type.c:25:
bool result = GraphNodeCount(&graph) == 0 && GraphEdgeCount(&graph) == 0 && GraphEmpty(&graph) &&
VecBegin(&graph.slots) == NULL && VecBegin(&graph.free_indices) == NULL &&
VecBegin(&graph.pending_edge_removals) == NULL && GraphCopyInit(&graph) == NULL &&
GraphCopyDeinit(&graph) == NULL && graph.pending_delete_count == 0 &&
GraphMutationEpoch(&graph) == 0 && GraphAllocator(&graph)->alignment == 1;- In
Vec.Init.c:52:
// Check initial state
bool result = (VecLen(&vec) == 0 && VecCapacity(&vec) == 0 && VecBegin(&vec) == NULL &&
VecAllocator(&vec)->alignment == 1 && VecCopyInit(&vec) == NULL && VecCopyDeinit(&vec) == NULL);- In
Vec.Init.c:64:
// Check initial state
result = result &&
(VecLen(&test_vec) == 0 && VecCapacity(&test_vec) == 0 && VecBegin(&test_vec) == NULL &&
VecAllocator(&test_vec)->alignment == 1 && VecCopyInit(&test_vec) == NULL &&
VecCopyDeinit(&test_vec) == NULL);- In
Vec.Init.c:86:
// Check initial state
bool result = (VecLen(&vec) == 0 && VecCapacity(&vec) == 0 && VecBegin(&vec) == NULL &&
VecAllocator(&vec)->alignment == 4 && VecCopyInit(&vec) == NULL && VecCopyDeinit(&vec) == NULL);- In
Vec.Init.c:98:
// Check initial state
result = result &&
(VecLen(&test_vec) == 0 && VecCapacity(&test_vec) == 0 && VecBegin(&test_vec) == NULL &&
VecAllocator(&test_vec)->alignment == 16 && VecCopyInit(&test_vec) == NULL &&
VecCopyDeinit(&test_vec) == NULL);- In
Vec.Init.c:120:
// Check initial state
bool result =
(VecLen(&vec) == 0 && VecCapacity(&vec) == 0 && VecBegin(&vec) == NULL &&
VecAllocator(&vec)->alignment == 1 && VecCopyInit(&vec) == (GenericCopyInit)TestItemCopyInit &&
VecCopyDeinit(&vec) == (GenericCopyDeinit)TestItemDeinit);- In
Vec.Init.c:142:
// Check initial state
bool result =
(VecLen(&vec) == 0 && VecCapacity(&vec) == 0 && VecBegin(&vec) == NULL &&
VecAllocator(&vec)->alignment == 8 && VecCopyInit(&vec) == (GenericCopyInit)TestItemCopyInit &&
VecCopyDeinit(&vec) == (GenericCopyDeinit)TestItemDeinit);- In
Vec.Init.c:219:
VecInitStack(int, vec, 10) {
// Stack-init: NULL allocator distinguishes from heap-init.
if (VecLen(&vec) != 0 || VecCapacity(&vec) != 10 || VecBegin(&vec) == NULL ||
VecAllocator(&vec) != NULL) {
result = false;- In
Vec.Init.c:235:
// Test with struct type
VecInitStack(TestItem, test_vec, 5) {
if (VecLen(&test_vec) != 0 || VecCapacity(&test_vec) != 5 || VecBegin(&test_vec) == NULL ||
VecAllocator(&test_vec) != NULL) {
result = false;- In
Vec.Init.c:258:
} AlignedItem;
VecInitStack(AlignedItem, av, 4) {
if ((size)(void *)VecBegin(&av) % _Alignof(AlignedItem) != 0) {
result = false;
}- In
Vec.Init.c:298:
// Clone the source vector into the destination
VecPushBackArrR(&clone, VecBegin(&src), VecLen(&src));
// Check that the clone has the same data but different memory
- In
Vec.Init.c:302:
// Check that the clone has the same data but different memory
bool result =
(VecLen(&clone) == VecLen(&src) && VecCapacity(&clone) >= VecLen(&src) && VecBegin(&clone) != VecBegin(&src) &&
VecAllocator(&clone)->alignment == VecAllocator(&src)->alignment);- In
Vec.Memory.c:182:
// Data pointer should still be valid
result = result && (VecBegin(&vec) != NULL);
// Clean up
// Check initial state
bool result =
(VecLen(&vec) == 0 && VecCapacity(&vec) == 0 && VecBegin(&vec) == NULL &&
VecCopyInit(&vec) == (GenericCopyInit)ComplexItemCopyInit &&
VecCopyDeinit(&vec) == (GenericCopyDeinit)ComplexItemDeinit); result = result && (VecLen(&vec3) == 2);
result = result && (VecLen(&vec4) == 0); // VecMergeL resets source vector
result = result && (VecBegin(&vec4) == NULL);
// Check items in vec3: item4, item5
// Check that vec2 is now empty (data has been transferred)
result = result && (VecLen(&vec2) == 0);
result = result && (VecBegin(&vec2) == NULL);
// Clean up
- In
Vec.Access.c:135:
// Test VecBegin and VecEnd functions
bool test_vec_begin_end(void) {
WriteFmt("Testing VecBegin and VecEnd\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Vec.Access.c:149:
// Get begin and end pointers
int *begin = VecBegin(&vec);
char *end = (char *)VecEnd(&vec);- In
Vec.Type.c:31:
// Check initial state
bool result =
(VecLen(&vec) == 0 && VecCapacity(&vec) == 0 && VecBegin(&vec) == NULL &&
VecAllocator(&vec)->alignment == 1 && VecCopyInit(&vec) == NULL && VecCopyDeinit(&vec) == NULL);- In
Vec.Type.c:43:
// Check initial state
result =
result && (VecLen(&test_vec) == 0 && VecCapacity(&test_vec) == 0 && VecBegin(&test_vec) == NULL &&
VecAllocator(&test_vec)->alignment == 1 && VecCopyInit(&test_vec) == NULL &&
VecCopyDeinit(&test_vec) == NULL);- In
Vec.Insert.c:249:
// Insert range in the middle
VecInsertRangeR(&vec, VecBegin(&src), 1, VecLen(&src));
// Check length
- In
Vec.Insert.c:339:
dst.copy_init = src.copy_init;
dst.copy_deinit = src.copy_deinit;
bool cloned = VecPushBackArrR(&dst, VecBegin(&src), VecLen(&src));
bool allocator_matches = VecAllocator(&dst) == VecAllocator(&src);- In
Vec.Insert.c:505:
// Check that the source vector is cleared
result = result && (VecLen(&vec2) == 0);
result = result && (VecBegin(&vec2) == NULL);
// Clean up
- In
Init.h:82:
///
#define IterInitFromVec(v) \
{.data = VecBegin(&(v)), \
.length = VecLen(&(v)), \
.pos = 0, \- In
Init.h:101:
///
#define IterInitRevFromVec(v) \
{.data = VecBegin(&(v)), \
.length = VecLen(&(v)), \
.pos = 0, \- In
Init.h:180:
///
#define IterInitFromVecT(i, v) \
((TYPE_OF(i)) {.data = VecBegin(&(v)), \
.length = VecLen(&(v)), \
.pos = 0, \- In
Init.h:200:
///
#define IterInitRevFromVecT(i, v) \
((TYPE_OF(i)) {.data = VecBegin(&(v)), \
.length = VecLen(&(v)), \
.pos = 0, \- In
Access.h:88:
/// TAGS: Str, Access, Iterator, Begin
///
#define StrBegin(str) VecBegin(str)
///
Last updated on