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..8984c8e 100644 --- a/test.c +++ b/test.c @@ -163,5 +163,6 @@ int main() { } cvector_free(str_vect); + 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;