diff --git a/src/main.c b/src/main.c index 565669d..281e5e5 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,35 @@ * Vector Library For C */ +/* + * All functions needed + * Ones that start with '>' I have completed + * + * > at() Returns an indexed element from a vector + * > back() Returns the last element of a vector + * > begin() Returns an iterator pointing to the beginning of a vector + * > capacity() Returns the number of elements that a vector's reserved memory + * is able to store > front() Returns the first element of a vector > end() + * Returns an iterator pointing to the end of a vector > push_back() Adds an + * element to the end of a vector > size() Returns the number of elements + * in a vector + * + * assign() Fills a vector with multiple values + * clear() Removes all of the contents of a vector + * data() Returns a pointer to the block of memory where a vector's elements are + * stored empty() Checks whether a vector is empty or not erase() Removes + * a number of elements from a vector insert() Inserts a number of elements + * into a vector max_size() Returns the maximum number of elements that a + * vector can have pop_back() Removes the last element of a vector rbegin() + * Returns a reverse iterator pointing to the last element of a vector rend() + * Returns a reverse iterator pointing to a position right before the first + * element of a vector reserve() Reserves memory for a vector resize() + * Changes the size of a vector, adding or removing elements if necessary + * shrink_to_fit() Reduces the reseved memory of a vector if necessary to + * exactly fit the number of elements swap() Swaps the contents of one vector + * with another + * */ + /* * Types Wanted: * Char @@ -36,24 +65,13 @@ typedef struct size_t capacity; } Vec8_t; -/* Takes in a temporary cpy of a vec - * - Can be nullptr to not have size incrementation and have a size of 0 (Create - * an empty vector) - * - * - Can be a vec to have size incrementation and size of base vec + 1 (Create a - * vector for modifying an old vector) - * - * */ +#define CAPACITY 1024 + Vec8_t create(const Vec8_t* input) { - Vec8_t vec = { .arr = nullptr, .size = 0, .capacity = 4 }; - if (input == nullptr) - { - vec.arr = calloc(vec.capacity, sizeof(char)); - return vec; - } - if (input->size > 0) + Vec8_t vec = { .arr = nullptr, .size = 0, .capacity = CAPACITY }; + if (input != nullptr && input->size > 0) { vec.size = input->size + 1; } @@ -71,6 +89,19 @@ delete(Vec8_t* vec) vec->arr = nullptr; } +Vec8_t +clear(Vec8_t* vec) +{ + if (vec != nullptr && vec->capacity > 0) + { + for(int i = 0; i < vec->size; i++) { + if(!vec->arr) continue; + vec->arr[i] = 0; + } + } + return *vec; +} + char at(const Vec8_t* vec, const int idx) { @@ -148,14 +179,16 @@ add_back(Vec8_t* vec, const char val) if (vec->size >= vec->capacity) { vec->capacity *= 2; - char* nvec = reallocf(vec->arr, vec->capacity * sizeof(char)); - if(nvec == NULL) { - return *vec; - } - } - vec->arr[vec->size] = val; - vec->size++; - return *vec; + char* nvec = reallocf(vec->arr, vec->capacity * sizeof(char)); + if (nvec == NULL) + { + return *vec; + } + vec->arr = nvec; + } + vec->arr[vec->size] = val; + vec->size++; + return *vec; } int @@ -166,10 +199,13 @@ main() vec = add_back(&vec, '4'); vec = add_back(&vec, '5'); vec = add_back(&vec, '6'); - print_vec(&vec); - // vec = add_back(&vec, '6'); - // vec = add_front(&vec, 'c'); - // print_vec(&vec); + vec = add_back(&vec, '8'); + vec = add_back(&vec, '6'); + clear(&vec); + for(int i = 0; i < vec.size; i++) { + printf("%i\n", at(&vec, i)); + } + // print_vec(&vec); // printf("%c", at(nullptr, 0)); delete(&vec);