-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathxvector.h
More file actions
58 lines (51 loc) · 2.97 KB
/
xvector.h
File metadata and controls
58 lines (51 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#ifndef _XVECTOR_H
#define _XVECTOR_H
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include "xerror.h"
#ifndef _SIZE_T_DEFINED
#define _SIZE_T_DEFINED
#undef size_t
#ifdef _WIN64
typedef unsigned long long size_t;
#else
typedef unsigned int size_t;
#endif
#endif
#define X_MEMORY_RANGE (4) /* upper limit for malloc. this shouldn't be negative. instead of reallocing if the lengths aren't equal, */
/* reallocate if the length of A is less than B (required), or A has X more than B cells allocated. */
#define REALLOCATE(R, Rlength, length) \
do{\
if ((Rlength) < (length) || (Rlength) > (length) + X_MEMORY_RANGE || R == NULL) { \
if ((R) != NULL) free((R)); \
if (((R) = (double*)malloc(sizeof(double)*(length))) == NULL) return ERR_INIT; \
(Rlength) = (length); \
}\
}while(0)
// vector_sort
// vector_reverse
int vector_abs(double* const A, const size_t length);
int vector_negate(double* const A, const size_t length);
int vector_add(const double* const A, const size_t Alength, const double* const B, const size_t Blength, double** const R, size_t* Rsize);
int vector_subtract(const double* const A, const size_t Alength, const double* const B, const size_t Blength, double** R, size_t* Rsize);
int vector_multiply_s(double* const A, const size_t length, const double scalar, const size_t incr);
int vector3_cross(const double* const A, const double* const B, double** const R, size_t* const length);
double vector_angle(const double* const A, const double* const B, const size_t length);
int vector_normalize(double* const A, const size_t length);
double vector_dotProduct(const double* const A, const double* const B, const size_t length);
static inline double vector_length(const double* const A, const size_t length) {
if (A == NULL){ return 0; }
return sqrt(vector_dotProduct(A,A,length));
}
int vector_swapEntrys(double* const A, const size_t Alength, const size_t x, const size_t y, const size_t length, const size_t incr);
int vector_setList(double* const A, const size_t Alength, const char* const list);
int vector_setAll(double* const A, const size_t length, const double val, const size_t incr);
int vector_setEqualArray(double** const A, size_t* const Alength, const double* const B, const size_t Blength, const size_t length);
int vector_setEntrysEqual(const double* const A, const size_t Alength, double* const R, const size_t Rlength, const size_t length, const size_t incr);
int vector_getEntrys(const double* const A, const size_t Alength, double** R, size_t* const Rsize, const size_t length, const size_t incr);
double vector_retMin(const double* const A, const size_t length, const size_t incr);
double vector_retMax(const double* const A, const size_t length, const size_t incr);
bool vector_isEqual(const double* const A, const size_t Alength, const double* const B, const size_t Blength);
bool vector_isZero(const double* const A, const size_t length);
#endif