From be15781d892efb5ed3cecac1d2e97242cc6d2f98 Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Fri, 21 Feb 2020 16:20:20 -0500 Subject: Fix rename double ended queue files Also add gitignore. --- .gitigore | 2 + collections/double_ended_queue.c | 162 +++++++++++++++++++++++++++++++++++++++ collections/double_ended_queue.h | 16 ++++ vector.c | 162 --------------------------------------- vector.h | 16 ---- 5 files changed, 180 insertions(+), 178 deletions(-) create mode 100644 .gitigore create mode 100644 collections/double_ended_queue.c create mode 100644 collections/double_ended_queue.h delete mode 100644 vector.c delete mode 100644 vector.h diff --git a/.gitigore b/.gitigore new file mode 100644 index 0000000..e5a1669 --- /dev/null +++ b/.gitigore @@ -0,0 +1,2 @@ +*.bak +*.o diff --git a/collections/double_ended_queue.c b/collections/double_ended_queue.c new file mode 100644 index 0000000..76856f2 --- /dev/null +++ b/collections/double_ended_queue.c @@ -0,0 +1,162 @@ +#include "vector.h" + +#include +#include +#include + +#include + +#define START_SIZE 64; + +struct vector { + void **base, **new, **ptr; + int i, limit; +}; + +vec* vec_new() +{ + vec *root; + + root = malloc(sizeof(vec)); + assert(root); + + root->limit = START_SIZE; + root->base = root->new = root->ptr = malloc(root->limit * sizeof(void*)); + assert(root->base); + + return root; +} + +vec* vec_with_capacity(n) +int n; +{ + vec *root; + + root = malloc(sizeof(vec)); + assert(root); + + root->limit = n; + root->base = root->new = root->ptr = malloc(root->limit * sizeof(void*)); + assert(root->base); + + return root; +} + +int vec_size(root) +vec *root; +{ + if (!root) { + return -1; + } + return (root->new - root->ptr); +} + +void vec_resize(root) +vec *root; +{ + if (root->ptr != root->base) { + memmove(root->base, root->ptr, root->new - root->ptr); + root->new = root->base + vec_size(root); + root->ptr = root->base; + } else { + root->base = malloc(root->limit * 2 * sizeof(void*)); + assert(root->base); + + + root->base = memcpy(root->base, root->ptr, root->limit * sizeof(void*)); + assert(root->base); + + + root->new = root->base + vec_size(root); + root->limit = root->limit * 2; + + free(root->ptr); + root->ptr = root->base; + } +} + +void vec_push(root, item) +vec *root; +void *item; +{ + if (!root) { + return; + } + if (root->new == root->base + root->limit) { + vec_resize(root); + } + + *(root->new++) = item; +} + +void* vec_rmfirst(root) +vec *root; +{ + void* tmp; + if (!root || root->ptr == root->new) { + return NULL; + } + + return tmp = *(root->ptr++); +} + +void* vec_index(root, index) +vec *root; +int index; +{ + if (!root || root->ptr + index >= root->new) { + return NULL; + } + + return root->ptr[index]; +} + +void* vec_pop(root) +vec *root; +{ + void* tmp; + if (!root || root->new == root->ptr) { + return NULL; + } + + return tmp = *(--root->new); +} + +void vec_free(root) +vec *root; +{ + free(root->base); + root->base = NULL; + root->new = NULL; + root->ptr = NULL; + + free(root); +} + +void vec_print(root) +vec *root; +{ + void **tmp; + + fprintf(stderr, "VEC[b: %p, p: %p, n:%p]:\n\t ", + root->base, root->ptr, root->new); + for (tmp = root->ptr; tmp < root->new; tmp++){ + fprintf(stderr, "[%p]", *tmp); + } + fprintf(stderr, "\n"); +} + +vec* vec_cp(root) +vec *root; +{ + vec *copy; + + copy = vec_with_capacity(root->limit); + + copy->base = memcpy(copy->base, root->ptr, + vec_size(root) * sizeof(void*)); + assert(copy->base); + + copy->ptr = copy->base; + copy->new = copy->base + vec_size(root); +} diff --git a/collections/double_ended_queue.h b/collections/double_ended_queue.h new file mode 100644 index 0000000..0c7bdce --- /dev/null +++ b/collections/double_ended_queue.h @@ -0,0 +1,16 @@ +#ifndef VECTOR_H +#define VECTOR_H + +typedef struct vector vec; + +vec* vec_new(); +vec* vec_with_capacity(int); +int vec_size(vec*); +void vec_push(vec*, void*); +void* vec_rmfirst(vec*); +void* vec_index(vec*, int); +void vec_free(vec*); +void* vec_pop(vec*); +void vec_print(vec*); +vec* vec_cp(vec*); +#endif diff --git a/vector.c b/vector.c deleted file mode 100644 index 76856f2..0000000 --- a/vector.c +++ /dev/null @@ -1,162 +0,0 @@ -#include "vector.h" - -#include -#include -#include - -#include - -#define START_SIZE 64; - -struct vector { - void **base, **new, **ptr; - int i, limit; -}; - -vec* vec_new() -{ - vec *root; - - root = malloc(sizeof(vec)); - assert(root); - - root->limit = START_SIZE; - root->base = root->new = root->ptr = malloc(root->limit * sizeof(void*)); - assert(root->base); - - return root; -} - -vec* vec_with_capacity(n) -int n; -{ - vec *root; - - root = malloc(sizeof(vec)); - assert(root); - - root->limit = n; - root->base = root->new = root->ptr = malloc(root->limit * sizeof(void*)); - assert(root->base); - - return root; -} - -int vec_size(root) -vec *root; -{ - if (!root) { - return -1; - } - return (root->new - root->ptr); -} - -void vec_resize(root) -vec *root; -{ - if (root->ptr != root->base) { - memmove(root->base, root->ptr, root->new - root->ptr); - root->new = root->base + vec_size(root); - root->ptr = root->base; - } else { - root->base = malloc(root->limit * 2 * sizeof(void*)); - assert(root->base); - - - root->base = memcpy(root->base, root->ptr, root->limit * sizeof(void*)); - assert(root->base); - - - root->new = root->base + vec_size(root); - root->limit = root->limit * 2; - - free(root->ptr); - root->ptr = root->base; - } -} - -void vec_push(root, item) -vec *root; -void *item; -{ - if (!root) { - return; - } - if (root->new == root->base + root->limit) { - vec_resize(root); - } - - *(root->new++) = item; -} - -void* vec_rmfirst(root) -vec *root; -{ - void* tmp; - if (!root || root->ptr == root->new) { - return NULL; - } - - return tmp = *(root->ptr++); -} - -void* vec_index(root, index) -vec *root; -int index; -{ - if (!root || root->ptr + index >= root->new) { - return NULL; - } - - return root->ptr[index]; -} - -void* vec_pop(root) -vec *root; -{ - void* tmp; - if (!root || root->new == root->ptr) { - return NULL; - } - - return tmp = *(--root->new); -} - -void vec_free(root) -vec *root; -{ - free(root->base); - root->base = NULL; - root->new = NULL; - root->ptr = NULL; - - free(root); -} - -void vec_print(root) -vec *root; -{ - void **tmp; - - fprintf(stderr, "VEC[b: %p, p: %p, n:%p]:\n\t ", - root->base, root->ptr, root->new); - for (tmp = root->ptr; tmp < root->new; tmp++){ - fprintf(stderr, "[%p]", *tmp); - } - fprintf(stderr, "\n"); -} - -vec* vec_cp(root) -vec *root; -{ - vec *copy; - - copy = vec_with_capacity(root->limit); - - copy->base = memcpy(copy->base, root->ptr, - vec_size(root) * sizeof(void*)); - assert(copy->base); - - copy->ptr = copy->base; - copy->new = copy->base + vec_size(root); -} diff --git a/vector.h b/vector.h deleted file mode 100644 index 0c7bdce..0000000 --- a/vector.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef VECTOR_H -#define VECTOR_H - -typedef struct vector vec; - -vec* vec_new(); -vec* vec_with_capacity(int); -int vec_size(vec*); -void vec_push(vec*, void*); -void* vec_rmfirst(vec*); -void* vec_index(vec*, int); -void vec_free(vec*); -void* vec_pop(vec*); -void vec_print(vec*); -vec* vec_cp(vec*); -#endif -- cgit v1.1