-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathvector.h
More file actions
69 lines (59 loc) · 2.24 KB
/
vector.h
File metadata and controls
69 lines (59 loc) · 2.24 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
59
60
61
62
63
64
65
66
67
68
69
#ifndef __VECTOR__
#define __VECTOR__
/*TODO:
* rename size if we want lazy removal
* NULL check for removal
* NULL init array
* insert and defragment functions
*/
#include <omp.h>
#include "common.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define REMP_SORTED 0
#define REMP_FAST 1
#define REMP_LAZY 2
#define VECTOR_VARIABLE_SIZE 0
typedef struct __vector_t{
void **items;
size_t item_sizeof;
size_t limit;
size_t size;
int REMOVE_POLICY;
int fragmental;
void (*rmv)(void *);
} vector_t;
vector_t *vector_execute_for_all_and_save(vector_t *v, void *(*foo)(void *));
void vector_execute_for_all(vector_t *v, void (*foo)(void *));
typedef void (*foo_gen_no_ret)(void *);
typedef void *(*foo_gen_wi_ret)(void *);
#define vector_exec(V,FOO) _Generic((FOO), \
foo_gen_no_ret:vector_execute_for_all,\
foo_gen_wi_ret:vector_execute_for_all_and_save\
)((V),(FOO))
vector_t *vector_dot_prod(vector_t *, vector_t *, void *(*foo)(void *, void *));
vector_t *vector_x_prod(vector_t *, vector_t *, void *(*foo)(void *, void *));
void *vector_reduce(vector_t *, void *(*foo)(void *, void *));
void vector_filter(vector_t *,int (*check)(void *));
vector_t *vector_select(vector_t *,int (*check)(void *));
vector_t *vector_init(size_t item_sizeof, size_t initial_limit);
int vector_put(vector_t *vector, void* item);
void vector_soft_put(vector_t *vector, void *item);
void vector_soft_transfer(vector_t *vector, vector_t *source);
int vector_remove(vector_t *vector, size_t index);
int vector_contains(vector_t *vector, void *item);
int vector_comptains(vector_t *vector, void *item, int (*cmp)(const void*,const void*));
void *vector_get(vector_t *vector, size_t index); //Optional for index check
void *vector_head(vector_t *vector);
void *vector_tail(vector_t *vector);
void vector_insert(vector_t *vector, void *item, size_t index);
int vector_defragment(vector_t *vector);
void vector_free(void /*vector_t*/ *vector);
void vector_zip(vector_t *vector);
void vector_clear(vector_t *vector);
void vector_tabularasa(vector_t *vector);
void vector_set_remove_function(vector_t *vector, void (*rmv)(void*));
vector_t *dang_string_tokenize(const char *str, const char *delims);
void do_nothing(void *v);
#endif