diff --git a/src/main.c b/src/main.c index c154a7b..0049576 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,123 @@ +/* + * Types Wanted: + * Char + * Float + * Int + * String + */ +#include #include +#include +#include -int main() { - printf("%s", "Hello World"); +typedef struct +{ + char* arr; + size_t size; +} Vec8_t; + +Vec8_t +create(size_t init_size) +{ + Vec8_t vec = { .arr = nullptr, .size = 0 }; + if (init_size > 0) + { + vec.arr = malloc(init_size * sizeof(char)); + vec.size = init_size; + } + return vec; +} + +void +delete(Vec8_t* vec) +{ + if (vec->arr != nullptr) + { + free(vec->arr); + } + vec->arr = nullptr; +} + +char +at(Vec8_t* vec, int idx) +{ + if (vec->arr != nullptr && vec->size >= idx) + { + return vec->arr[idx]; + } + return -1; +} + +int +begin(Vec8_t* vec) +{ + if (vec->arr != nullptr && vec->size > 0) + { + return 1; + } + return -1; +} + +int +end(Vec8_t* vec) +{ + if (vec->arr != nullptr && vec->size > 0) + { + return (int)(vec->size - 1); + } + return -1; +} + +char +front(Vec8_t* vec) +{ + if (vec->arr != nullptr && vec->size > 0) + { + return vec->arr[0]; + } + return -1; +} + +char +back(Vec8_t* vec) +{ + if (vec->arr != nullptr && vec->size > 0) + { + return vec->arr[vec->size - 1]; + } + return -1; +} + +Vec8_t +add_back(Vec8_t* vec, char val) +{ + Vec8_t nvec = create(vec->size + 1); + memcpy(&nvec.arr[0], &vec->arr[0], vec->size * sizeof(char)); + if (nvec.arr && (nvec.size > 0 || nvec.size > vec->size)) + { + nvec.arr[vec->size] = val; + } + return nvec; +} + +int +main() +{ + Vec8_t vec = create(0); + vec = add_back(&vec, '3'); + vec = add_back(&vec, '4'); + vec = add_back(&vec, '5'); + vec = add_back(&vec, '6'); + for(int i = 0; i < vec.size; i++) { + printf("%c\n", at(&vec, i)); + } + + // for (int i = 0; i < capacity; i++) + // { + // printf("%c\n", at(&vec, i)); + // } + + delete(&vec); + // printf("%s", "Hello World"); return 0; }