VecAlignedOffsetAt
- Macro
- October 8, 2025
Table of Contents
VecAlignedOffsetAt
VecAlignedOffsetAtDescription
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
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) {
WriteFmt("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
- 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
VecInt.c:359:
uint16_t idx = extract_u16(data, offset, size);
if (idx <= VecLen(vec)) {
volatile uint64_t offset_val = VecAlignedOffsetAt(vec, idx);
(void)offset_val;
}
- In
VecStr.c:386:
size_t index = extract_u32(data, offset, size) % VecLen(vec);
// Note: VecAlignedOffsetAt doesn't take alignment parameter
size_t offset = VecAlignedOffsetAt(vec, index);
(void)offset; // Use the result to avoid warnings
}
- In
VecCharPtr.c:422:
size_t index = extract_u32(data, offset, size) % VecLen(vec);
// Note: VecAlignedOffsetAt doesn't take alignment parameter
size_t offset = VecAlignedOffsetAt(vec, index);
(void)offset; // Use the result to avoid warnings
}