From 29db4e615e4bfdf6ec107e5cdd1547403eb2a6e4 Mon Sep 17 00:00:00 2001 From: leiyu3 Date: Thu, 22 Sep 2022 09:39:20 -0400 Subject: change to static library --- Makefile | 16 +++++++- libvector.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.c | 127 +----------------------------------------------------------- vector.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 257 insertions(+), 127 deletions(-) create mode 100644 libvector.c create mode 100644 vector.c diff --git a/Makefile b/Makefile index d37a3a1..14ec6f7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,17 @@ CC=clang +CFLAGS=-Wall -g +BINS = vector.o libvector.a main test +all: $(BINS) -main: main.c - gcc main.c -o main +vector.o: vector.h libvector.c + $(CC) $(CFLAGS) -c libvector.c + +libvector.a: libvector.o + ar -cvq libvector.a libvector.o + +main: main.c libvector.a + $(CC) $(CFLAGS) -o $@ $^ + +test: test.c + gcc test.c -o test -lcriterion diff --git a/libvector.c b/libvector.c new file mode 100644 index 0000000..b113abe --- /dev/null +++ b/libvector.c @@ -0,0 +1,121 @@ +#include +#include +#include "vector.h" + +vector_t vector_init(int size){ + vector_t vec; + vec.max_size = size; + vec.arr = malloc(sizeof(int)*vec.max_size); + vec.cur_size = 0; + return vec; +} + +int size(vector_t vec){ + return vec.cur_size; +} + +int capacity(vector_t vec){ + return vec.max_size; +} + +int is_empty(vector_t vec){ + if (vec.cur_size == 0){ + return 1; + } + return 0; +} + +int is_full(vector_t vec){ + if (vec.cur_size >= vec.max_size){ + return 1; + } + return 0; +} + +int at(vector_t vec, int index){ + if (index >= vec.max_size){ + printf("Index out of bound!!\n"); + exit(1); + } + + return vec.arr[index]; +} + +void push(vector_t *vec, int value){ + if (is_full(*vec)){ + printf("Array out of Size!!\n\ + Can't push!! \n\ + Not yet implemented resize!!\n"); + exit(1); + } + + vec->arr[vec->cur_size] = value; + vec->cur_size++; +} + +void insert(vector_t *vec, int index, int val){ + if (is_full(*vec)){ + printf("Array out of Size!!\n\ + Can't insert!\n\ + Not yet implemented resize!!\n"); + exit(1); + } + + int tmp; + for (int i = index; i <= vec->cur_size; i++){ + tmp = val; + val = vec->arr[i]; + vec->arr[i] = tmp; + } + vec->cur_size += 1; +} + +void delete_vec(vector_t *vec, int index){ + if (!(index < vec->cur_size)){ + printf("Invalid Index!\nFailed to Delete Element\n"); + exit(-1); + } + int len = vec->cur_size - 1; + + for (int i = index; i < len; i++){ + vec->arr[i] = vec->arr[i+1]; + } + + vec->cur_size = vec->cur_size - 1; +} + +void remove_val(vector_t *vec, int value){ + int i = 0; + while (i < vec->cur_size){ + if (vec->arr[i] == value){ + delete_vec(vec, i); + continue; + } + i++; + } +} + +void prepend(vector_t *vec, int value){ + insert(vec, 0, value); +} + +int pop(vector_t *vec){ + // remove item at the end, return value + int ret = vec->arr[vec->cur_size-1]; + vec->cur_size--; + return ret; +} + +void print_vec(vector_t vec){ + printf("["); + for (int i = 0; i < vec.cur_size; i++){ + printf("%d ", vec.arr[i]); + + } + printf("]\n"); +} + +void destroy_vec(vector_t *vec){ + free(vec->arr); +} + diff --git a/main.c b/main.c index ab99fb3..0c0b282 100644 --- a/main.c +++ b/main.c @@ -1,129 +1,6 @@ #include #include - - -typedef struct { - int *arr; - int max_size; - int cur_size; -} vector_t; - -vector_t vector_init(int size){ - vector_t vec; - vec.max_size = size; - vec.arr = malloc(sizeof(int)*vec.max_size); - vec.cur_size = 0; - return vec; -} - -int size(vector_t vec){ - return vec.cur_size; -} - -int capacity(vector_t vec){ - return vec.max_size; -} - -int is_empty(vector_t vec){ - if (vec.cur_size == 0){ - return 1; - } - return 0; -} - -int is_full(vector_t vec){ - if (vec.cur_size >= vec.max_size){ - return 1; - } - return 0; -} - -int at(vector_t vec, int index){ - if (index >= vec.max_size){ - printf("Index out of bound!!\n"); - exit(1); - } - - return vec.arr[index]; -} - -void push(vector_t *vec, int value){ - if (is_full(*vec)){ - printf("Array out of Size!!\n\ - Can't push!! \n\ - Not yet implemented resize!!\n"); - exit(1); - } - - vec->arr[vec->cur_size] = value; - vec->cur_size++; -} - -void insert(vector_t *vec, int index, int val){ - if (is_full(*vec)){ - printf("Array out of Size!!\n\ - Can't insert!\n\ - Not yet implemented resize!!\n"); - exit(1); - } - - int tmp; - for (int i = index; i <= vec->cur_size; i++){ - tmp = val; - val = vec->arr[i]; - vec->arr[i] = tmp; - } - vec->cur_size += 1; -} - -void delete(vector_t *vec, int index){ - if (!(index < vec->cur_size)){ - printf("Invalid Index!\nFailed to Delete Element\n"); - exit(-1); - } - int len = vec->cur_size - 1; - - for (int i = index; i < len; i++){ - vec->arr[i] = vec->arr[i+1]; - } - - vec->cur_size = vec->cur_size - 1; -} - -void remove_val(vector_t *vec, int value){ - int i = 0; - while (i < vec->cur_size){ - if (vec->arr[i] == value){ - delete(vec, i); - continue; - } - i++; - } -} - -void prepend(vector_t *vec, int value){ - insert(vec, 0, value); -} - -int pop(vector_t *vec){ - // remove item at the end, return value - int ret = vec->arr[vec->cur_size-1]; - vec->cur_size--; - return ret; -} - -void print_vec(vector_t vec){ - printf("["); - for (int i = 0; i < vec.cur_size; i++){ - printf("%d ", vec.arr[i]); - - } - printf("]\n"); -} - -void destroy_vec(vector_t *vec){ - free(vec->arr); -} +#include "vector.h" int main(void){ vector_t vec = vector_init(16); @@ -146,7 +23,7 @@ int main(void){ remove_val(&vec, 5); /* for (int i = 0; i < vec.max_size; i++){ */ /* printf("pop: %d\n", pop(&vec)); */ - /* delete(&vec, 0); */ + /* delete_vec(&vec, 0); */ /* } */ printf("The size of the vector is %d.\n", size(vec)); diff --git a/vector.c b/vector.c new file mode 100644 index 0000000..2c8f8d2 --- /dev/null +++ b/vector.c @@ -0,0 +1,120 @@ +#include +#include + +vector_t vector_init(int size){ + vector_t vec; + vec.max_size = size; + vec.arr = malloc(sizeof(int)*vec.max_size); + vec.cur_size = 0; + return vec; +} + +int size(vector_t vec){ + return vec.cur_size; +} + +int capacity(vector_t vec){ + return vec.max_size; +} + +int is_empty(vector_t vec){ + if (vec.cur_size == 0){ + return 1; + } + return 0; +} + +int is_full(vector_t vec){ + if (vec.cur_size >= vec.max_size){ + return 1; + } + return 0; +} + +int at(vector_t vec, int index){ + if (index >= vec.max_size){ + printf("Index out of bound!!\n"); + exit(1); + } + + return vec.arr[index]; +} + +void push(vector_t *vec, int value){ + if (is_full(*vec)){ + printf("Array out of Size!!\n\ + Can't push!! \n\ + Not yet implemented resize!!\n"); + exit(1); + } + + vec->arr[vec->cur_size] = value; + vec->cur_size++; +} + +void insert(vector_t *vec, int index, int val){ + if (is_full(*vec)){ + printf("Array out of Size!!\n\ + Can't insert!\n\ + Not yet implemented resize!!\n"); + exit(1); + } + + int tmp; + for (int i = index; i <= vec->cur_size; i++){ + tmp = val; + val = vec->arr[i]; + vec->arr[i] = tmp; + } + vec->cur_size += 1; +} + +void delete(vector_t *vec, int index){ + if (!(index < vec->cur_size)){ + printf("Invalid Index!\nFailed to Delete Element\n"); + exit(-1); + } + int len = vec->cur_size - 1; + + for (int i = index; i < len; i++){ + vec->arr[i] = vec->arr[i+1]; + } + + vec->cur_size = vec->cur_size - 1; +} + +void remove_val(vector_t *vec, int value){ + int i = 0; + while (i < vec->cur_size){ + if (vec->arr[i] == value){ + delete(vec, i); + continue; + } + i++; + } +} + +void prepend(vector_t *vec, int value){ + insert(vec, 0, value); +} + +int pop(vector_t *vec){ + // remove item at the end, return value + int ret = vec->arr[vec->cur_size-1]; + vec->cur_size--; + return ret; +} + +void print_vec(vector_t vec){ + printf("["); + for (int i = 0; i < vec.cur_size; i++){ + printf("%d ", vec.arr[i]); + + } + printf("]\n"); +} + +void destroy_vec(vector_t *vec){ + free(vec->arr); +} + -- cgit v1.2.3