From 10e25b19fc8d17b0d2a55a62b05d0a59dafafe29 Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Mon, 23 Mar 2026 22:09:34 -0400 Subject: [PATCH 1/2] Add cvector_data() --- README.md | 1 + cvector.h | 7 +++++++ test.c | 17 +++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/README.md b/README.md index 0d7bf6f..1384d9b 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,7 @@ int main(int argc, char *argv[]) { | [`v.pop_back()`](https://en.cppreference.com/w/cpp/container/vector/pop_back) | `cvector_pop_back(v)` | | [`v.reserve(new_cap)`](https://en.cppreference.com/w/cpp/container/vector/reserve) | `cvector_reserve(v, new_cap)` | | [`v.resize(count)`](https://en.cppreference.com/w/cpp/container/vector/resize) | `cvector_resize(v, count)` | +| [`v.data()`](https://en.cppreference.com/w/cpp/container/vector/data) | `cvector_data(v)` | | [`v.swap(other)`](https://en.cppreference.com/w/cpp/container/vector/swap) | `cvector_swap(v, other)` | | [`std::vector other = v;`](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) | `cvector(int) other; cvector_copy(v, other);` | diff --git a/cvector.h b/cvector.h index f03123d..9be677d 100644 --- a/cvector.h +++ b/cvector.h @@ -456,6 +456,13 @@ typedef struct cvector_metadata_t { #define cvector_back(vec) \ ((vec) ? ((cvector_size(vec) > 0) ? cvector_at(vec, cvector_size(vec) - 1) : NULL) : NULL) +/** + * @brief cvector_data - returns a pointer to the memory used by the vector to store its elements. + * @param vec - the vector + * @return a pointer to the first element (or NULL) + */ +#define cvector_data(vec) cvector_begin(vec) + /** * @brief cvector_resize - resizes the container to contain count elements. * @param vec - the vector diff --git a/test.c b/test.c index 9bd2c32..eae065d 100644 --- a/test.c +++ b/test.c @@ -163,5 +163,22 @@ int main() { } cvector_free(str_vect); + + /* cvector_data */ + { + int *ptr; + cvector_vector_type(int) int_vec = NULL; + cvector_push_back(int_vec, 1); + cvector_push_back(int_vec, 2); + cvector_push_back(int_vec, 3); + ptr = cvector_data(int_vec); + assert(ptr != NULL); + assert(ptr == int_vec); + assert(ptr[0] == 1); + assert(ptr[1] == 2); + assert(ptr[2] == 3); + cvector_free(int_vec); + } + return 0; } From 382e432a13307c80a55e05a1d6044bef9d722770 Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Mon, 23 Mar 2026 22:16:39 -0400 Subject: [PATCH 2/2] Move to unit tests --- test.c | 16 ---------------- unit-tests.c | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/test.c b/test.c index eae065d..8984c8e 100644 --- a/test.c +++ b/test.c @@ -164,21 +164,5 @@ int main() { cvector_free(str_vect); - /* cvector_data */ - { - int *ptr; - cvector_vector_type(int) int_vec = NULL; - cvector_push_back(int_vec, 1); - cvector_push_back(int_vec, 2); - cvector_push_back(int_vec, 3); - ptr = cvector_data(int_vec); - assert(ptr != NULL); - assert(ptr == int_vec); - assert(ptr[0] == 1); - assert(ptr[1] == 2); - assert(ptr[2] == 3); - cvector_free(int_vec); - } - return 0; } diff --git a/unit-tests.c b/unit-tests.c index 207b443..3878840 100644 --- a/unit-tests.c +++ b/unit-tests.c @@ -345,6 +345,23 @@ UTEST(test, vector_resize) { cvector_free(a); } +UTEST(test, vector_data) { + cvector_vector_type(int) int_vec = NULL; + int *ptr; + + cvector_push_back(int_vec, 1); + cvector_push_back(int_vec, 2); + cvector_push_back(int_vec, 3); + + ptr = cvector_data(int_vec); + ASSERT_NE(ptr, NULL); + ASSERT_EQ(ptr, int_vec); + ASSERT_EQ(ptr[0], 1); + ASSERT_EQ(ptr[1], 2); + ASSERT_EQ(ptr[2], 3); + cvector_free(int_vec); +} + struct data_t { int num; int a, b, c, d;