VecAlignedOffsetAt
- Macro
- August 22, 2025
Table of Contents
VecAlignedOffsetAt
VecAlignedOffsetAt
Description
Vector implementation already manages alignment for stored objects. It makes sure that objects of improper size are stored at alignment of 8 bytes each to avoid UB.
Parameters
Name | Direction | Description |
---|---|---|
v | in | Vector to get aligned offset for. |
idx | in | Index of element to get offset of |
Success
Alignment address.
Failure
Does not return on failure
Usage example (Cross-references)
- In
Access.h:30
:
/// idx[in] : Index to get data at
///
#define VecAt(v, idx) ((VEC_DATATYPE(v) *)(VecAlignedOffsetAt((v), (idx)) + (char *)(v)->data))[0]
///
- In
Access.h:39
:
/// idx[in] : Index to get data at
///
#define VecPtrAt(v, idx) ((VEC_DATATYPE(v) *)(VecAlignedOffsetAt((v), (idx)) + (char *)(v)->data))
///
- In
Access.h:67
:
/// v[in] : Vector to get end of.
///
#define VecEnd(v) ((char *)(v)->data + VecAlignedOffsetAt((v), (v)->length))
///
- In
Access.h:75
:
/// v[in] : Vector to get length of
///
#define VecSize(v) VecAlignedOffsetAt(v, (v)->length)
///
- In
Vec.Access.c:169
:
vec_size = VecSize(&vec);
vec_len = VecLen(&vec);
size aligned_offset = VecAlignedOffsetAt(&vec, vec.length);
result = result && (vec_size == aligned_offset);
result = result && (vec_len == vec.length);
- In
Vec.Access.c:187
:
size aligned_vec_size = VecSize(&aligned_vec);
size aligned_vec_len = VecLen(&aligned_vec);
size aligned_offset_at = VecAlignedOffsetAt(&aligned_vec, aligned_vec.length);
result = result && (aligned_vec_size == aligned_offset_at);
result = result && (aligned_vec_len == aligned_vec.length);
- In
Vec.Access.c:199
:
// Test VecAlignedOffsetAt function
bool test_vec_aligned_offset_at(void) {
printf("Testing VecAlignedOffsetAt\n");
// Create a vector of integers with default alignment (1)
- In
Vec.Access.c:206
:
// Check offsets
bool result = (VecAlignedOffsetAt(&vec, 0) == 0);
result = result && (VecAlignedOffsetAt(&vec, 1) == sizeof(int));
result = result && (VecAlignedOffsetAt(&vec, 2) == 2 * sizeof(int));
- In
Vec.Access.c:207
:
// Check offsets
bool result = (VecAlignedOffsetAt(&vec, 0) == 0);
result = result && (VecAlignedOffsetAt(&vec, 1) == sizeof(int));
result = result && (VecAlignedOffsetAt(&vec, 2) == 2 * sizeof(int));
- In
Vec.Access.c:208
:
bool result = (VecAlignedOffsetAt(&vec, 0) == 0);
result = result && (VecAlignedOffsetAt(&vec, 1) == sizeof(int));
result = result && (VecAlignedOffsetAt(&vec, 2) == 2 * sizeof(int));
// Clean up
- In
Vec.Access.c:221
:
// Check offsets with alignment
result = result && (VecAlignedOffsetAt(&aligned_vec, 0) == 0);
result = result && (VecAlignedOffsetAt(&aligned_vec, 1) == aligned_size);
result = result && (VecAlignedOffsetAt(&aligned_vec, 2) == 2 * aligned_size);
- In
Vec.Access.c:222
:
// Check offsets with alignment
result = result && (VecAlignedOffsetAt(&aligned_vec, 0) == 0);
result = result && (VecAlignedOffsetAt(&aligned_vec, 1) == aligned_size);
result = result && (VecAlignedOffsetAt(&aligned_vec, 2) == 2 * aligned_size);
- In
Vec.Access.c:223
:
result = result && (VecAlignedOffsetAt(&aligned_vec, 0) == 0);
result = result && (VecAlignedOffsetAt(&aligned_vec, 1) == aligned_size);
result = result && (VecAlignedOffsetAt(&aligned_vec, 2) == 2 * aligned_size);
// Clean up