diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2023-02-06 20:10:05 -0800 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2023-02-06 20:10:05 -0800 |
| commit | 0d8e3fb79c4de063991b923adcc599a86d2c8cb6 (patch) | |
| tree | c1c0f3979401d4bd9a697fa5c8d4b2e948a9fc43 | |
| parent | b7f491a50f55c4175b0b5072a0f07e4f71b0e7ae (diff) | |
add vector.h
| -rw-r--r-- | vector.c | 57 | ||||
| -rw-r--r-- | vector.h | 30 |
2 files changed, 87 insertions, 0 deletions
diff --git a/vector.c b/vector.c new file mode 100644 index 0000000..846b361 --- /dev/null +++ b/vector.c @@ -0,0 +1,57 @@ +#include <stdlib.h> +#include "vector.h" +vector_t init_vector(int mx, int my) { + vector_t vector; + vector.mx = mx; + vector.my = my; + return vector; +} +vectorp_t init_vectorp(vector_t* vectors, int length) { + vectorp_t vectorP; + vectorP.vectors = vectors; + vectorP.length = length; + return vectorP; +} +bool vector_equals(vector_t v1, vector_t v2) { + return v1.mx == v2.mx && v1.my == v2.my; +} +vector_t vector_add(vector_t v1, vector_t v2) { + return init_vector(v1.mx + v2.mx, v1.my + v2.my); +} +vector_t vector_sub(vector_t v1, vector_t v2) { + return init_vector(v1.mx - v2.mx, v1.my - v2.my); +} +vectorp_t remove_vector(vectorp_t vectorp, int index) { + vector_t* vectors = malloc((vectorp.length - 1) * sizeof(vector_t)); + for(int i = 0; i < vectorp.length - 1; i++) { + int correctedIndex = i > index ? i - 1 : i; + if(i != index) { + vectors[correctedIndex] = vectorp.vectors[i]; + } + } + return init_vectorp(vectors, vectorp.length - 1); +} +vectorp_t remove_vectors(vectorp_t vectorp, int* indexes, int indexCount) { + vector_t* vectors = malloc((vectorp.length - indexCount) * sizeof(vector_t)); + int correctedIndex = 0; + for(int i = 0; i < vectorp.length - indexCount; i++) { + int toRemove = 0; + for(int j = 0; j < indexCount; j++) { + if(i == indexes[j]) { + toRemove = 1; + break; + } + } + if(!toRemove) { + vectors[correctedIndex] = vectorp.vectors[i]; + correctedIndex++; + } + } + return init_vectorp(vectors, vectorp.length - indexCount); +} +vectorpp_t init_vectorpp(vectorp_t* vectorps, int length) { + vectorpp_t vectorPP; + vectorPP.vectorps = vectorps; + vectorPP.length = length; + return vectorPP; +} diff --git a/vector.h b/vector.h new file mode 100644 index 0000000..b4558a1 --- /dev/null +++ b/vector.h @@ -0,0 +1,30 @@ +#ifndef VECTOR +#define VECTOR +typedef struct Vector { + int mx; + int my; +} vector_t; + +vector_t init_vector(int mx, int my); +bool vector_equals(vector_t v1, vector_t v2); +vector_t vector_add(vector_t v1, vector_t v2); +vector_t vector_sub(vector_t v1, vector_t v2); + +typedef struct VectorP { + vector_t* vectors; + int length; +} vectorp_t; + +vectorp_t init_vectorp(vector_t* vectors, int length); + +/* removes a vector from vectorp */ +vectorp_t remove_vector(vectorp_t vectorp, int index); +vectorp_t remove_vectors(vectorp_t vectorp, int* indexes, int indexCount); +typedef struct VectorPP { + vectorp_t* vectorps; + int length; +} vectorpp_t; + +vectorpp_t init_vectorpp(vectorp_t* vectorps, int length); + +#endif |
