summaryrefslogtreecommitdiff
path: root/src/ot_vector.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ot_vector.h')
-rw-r--r--src/ot_vector.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/ot_vector.h b/src/ot_vector.h
new file mode 100644
index 0000000..8a5ba86
--- /dev/null
+++ b/src/ot_vector.h
@@ -0,0 +1,39 @@
1/* This software was written by Dirk Engling <erdgeist@erdgeist.org>
2 It is considered beerware. Prost. Skol. Cheers or whatever. */
3
4#ifndef OT_VECTOR_H__
5#define OT_VECTOR_H__
6
7#include <stddef.h>
8
9/* These defines control vectors behaviour */
10#define OT_VECTOR_MIN_MEMBERS 2
11#define OT_VECTOR_GROW_RATIO 2
12#define OT_VECTOR_SHRINK_THRESH 4
13#define OT_VECTOR_SHRINK_RATIO 2
14
15#define OT_PEER_BUCKET_MINCOUNT 512
16#define OT_PEER_BUCKET_MAXCOUNT 256
17
18typedef struct {
19 void *data;
20 size_t size;
21 size_t space;
22} ot_vector;
23
24/* trackerlogic.h needs ot_vector, break circular dependency here */
25#include "trackerlogic.h"
26
27void *vector_binary_search(const void *const key, const void *base, const size_t member_count, const size_t member_size, size_t compare_size, int *exactmatch);
28void *vector_find_or_insert(ot_vector *vector, void *key, size_t member_size, size_t compare_size, int *exactmatch);
29ot_peer *vector_find_or_insert_peer(ot_vector *vector, ot_peer const *peer, size_t peer_size, int *exactmatch);
30
31int vector_remove_peer(ot_vector *vector, ot_peer const *peer, size_t peer_size);
32void vector_remove_torrent(ot_vector *vector, ot_torrent *match);
33
34/* For ot_clean.c */
35void vector_redistribute_buckets(ot_peerlist *peer_list, size_t peer_size);
36void vector_fixup_peers(ot_vector *vector, size_t peer_size);
37void vector_clean_list(ot_vector *vector, size_t num_buckets);
38
39#endif