Files
libvec/src/main.c
T
2026-04-16 09:32:09 -04:00

141 lines
2.1 KiB
C

/*
* Types Wanted:
* Char
* Float
* Int
* String
*/
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}
Vec8_t
add_front(Vec8_t* vec, char val)
{
Vec8_t nvec = create(vec->size + 1);
memcpy(&nvec.arr[1], &vec->arr[0], vec->size * sizeof(char));
if (nvec.arr && (nvec.size > 0 || nvec.size > vec->size))
{
nvec.arr[0] = 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));
}
printf("\n");
vec = add_front(&vec, 'c');
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;
}