3
3
4
4
#include < stdint.h>
5
5
#include < stdlib.h>
6
- #include < unistd.h>
6
+
7
+ #ifdef _MSC_VER
8
+ # include < compat.h>
9
+ #else
10
+ # include < unistd.h>
11
+ #endif
12
+
13
+ #ifndef MINISKETCH_API
14
+ # if defined(_WIN32)
15
+ # ifdef MINISKETCH_BUILD
16
+ # define MINISKETCH_API __declspec (dllexport)
17
+ # else
18
+ # define MINISKETCH_API
19
+ # endif
20
+ # elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(MINISKETCH_BUILD)
21
+ # define MINISKETCH_API __attribute__ ((visibility (" default" )))
22
+ # else
23
+ # define MINISKETCH_API
24
+ # endif
25
+ #endif
7
26
8
27
#ifdef __cplusplus
9
28
# if __cplusplus >= 201103L
@@ -21,7 +40,7 @@ extern "C" {
21
40
typedef struct minisketch minisketch;
22
41
23
42
/* * Determine whether support for elements of `bits` bits was compiled in. */
24
- int minisketch_bits_supported (uint32_t bits);
43
+ MINISKETCH_API int minisketch_bits_supported (uint32_t bits);
25
44
26
45
/* * Determine the maximum number of implementations available.
27
46
*
@@ -32,13 +51,13 @@ int minisketch_bits_supported(uint32_t bits);
32
51
* function call, inclusive. Note that not every combination of implementation
33
52
* and element size may exist (see further).
34
53
*/
35
- uint32_t minisketch_implementation_max (void );
54
+ MINISKETCH_API uint32_t minisketch_implementation_max (void );
36
55
37
56
/* * Determine if the a combination of bits and implementation number is available.
38
57
*
39
58
* Returns 1 if it is, 0 otherwise.
40
59
*/
41
- int minisketch_implementation_supported (uint32_t bits, uint32_t implementation);
60
+ MINISKETCH_API int minisketch_implementation_supported (uint32_t bits, uint32_t implementation);
42
61
43
62
/* * Construct a sketch for a given element size, implementation and capacity.
44
63
*
@@ -49,16 +68,16 @@ int minisketch_implementation_supported(uint32_t bits, uint32_t implementation);
49
68
*
50
69
* If the result is not NULL, it must be destroyed using minisketch_destroy.
51
70
*/
52
- minisketch* minisketch_create (uint32_t bits, uint32_t implementation, size_t capacity);
71
+ MINISKETCH_API minisketch* minisketch_create (uint32_t bits, uint32_t implementation, size_t capacity);
53
72
54
73
/* * Get the element size of a sketch in bits. */
55
- uint32_t minisketch_bits (const minisketch* sketch);
74
+ MINISKETCH_API uint32_t minisketch_bits (const minisketch* sketch);
56
75
57
76
/* * Get the capacity of a sketch. */
58
- size_t minisketch_capacity (const minisketch* sketch);
77
+ MINISKETCH_API size_t minisketch_capacity (const minisketch* sketch);
59
78
60
79
/* * Get the implementation of a sketch. */
61
- uint32_t minisketch_implementation (const minisketch* sketch);
80
+ MINISKETCH_API uint32_t minisketch_implementation (const minisketch* sketch);
62
81
63
82
/* * Set the seed for randomizing algorithm choices to a fixed value.
64
83
*
@@ -71,28 +90,28 @@ uint32_t minisketch_implementation(const minisketch* sketch);
71
90
* When seed is -1, a fixed internal value with predictable behavior is
72
91
* used. It is only intended for testing.
73
92
*/
74
- void minisketch_set_seed (minisketch* sketch, uint64_t seed);
93
+ MINISKETCH_API void minisketch_set_seed (minisketch* sketch, uint64_t seed);
75
94
76
95
/* * Clone a sketch.
77
96
*
78
97
* The result must be destroyed using minisketch_destroy.
79
98
*/
80
- minisketch* minisketch_clone (const minisketch* sketch);
99
+ MINISKETCH_API minisketch* minisketch_clone (const minisketch* sketch);
81
100
82
101
/* * Destroy a sketch.
83
102
*
84
103
* The pointer that was passed in may not be used anymore afterwards.
85
104
*/
86
- void minisketch_destroy (minisketch* sketch);
105
+ MINISKETCH_API void minisketch_destroy (minisketch* sketch);
87
106
88
107
/* * Compute the size in bytes for serializing a given sketch. */
89
- size_t minisketch_serialized_size (const minisketch* sketch);
108
+ MINISKETCH_API size_t minisketch_serialized_size (const minisketch* sketch);
90
109
91
110
/* * Serialize a sketch to bytes. */
92
- void minisketch_serialize (const minisketch* sketch, unsigned char * output);
111
+ MINISKETCH_API void minisketch_serialize (const minisketch* sketch, unsigned char * output);
93
112
94
113
/* * Deserialize a sketch from bytes. */
95
- void minisketch_deserialize (minisketch* sketch, const unsigned char * input);
114
+ MINISKETCH_API void minisketch_deserialize (minisketch* sketch, const unsigned char * input);
96
115
97
116
/* * Add an element to a sketch.
98
117
*
@@ -107,7 +126,7 @@ void minisketch_deserialize(minisketch* sketch, const unsigned char* input);
107
126
*
108
127
* Note that adding the same element a second time removes it again.
109
128
*/
110
- void minisketch_add_uint64 (minisketch* sketch, uint64_t element);
129
+ MINISKETCH_API void minisketch_add_uint64 (minisketch* sketch, uint64_t element);
111
130
112
131
/* * Merge the elements of another sketch into this sketch.
113
132
*
@@ -125,7 +144,7 @@ void minisketch_add_uint64(minisketch* sketch, uint64_t element);
125
144
* of two sketches with the same element size and capacity by performing a bitwise XOR
126
145
* of the serializations.
127
146
*/
128
- size_t minisketch_merge (minisketch* sketch, const minisketch* other_sketch);
147
+ MINISKETCH_API size_t minisketch_merge (minisketch* sketch, const minisketch* other_sketch);
129
148
130
149
/* * Decode a sketch.
131
150
*
@@ -134,7 +153,7 @@ size_t minisketch_merge(minisketch* sketch, const minisketch* other_sketch);
134
153
*
135
154
* The return value is the number of decoded elements, or -1 if decoding failed.
136
155
*/
137
- ssize_t minisketch_decode (const minisketch* sketch, size_t max_elements, uint64_t * output);
156
+ MINISKETCH_API ssize_t minisketch_decode (const minisketch* sketch, size_t max_elements, uint64_t * output);
138
157
139
158
/* * Compute the capacity needed to achieve a certain rate of false positives.
140
159
*
@@ -148,7 +167,7 @@ ssize_t minisketch_decode(const minisketch* sketch, size_t max_elements, uint64_
148
167
* function computes the necessary capacity. It is only guaranteed to be
149
168
* accurate up to fpbits=256.
150
169
*/
151
- size_t minisketch_compute_capacity (uint32_t bits, size_t max_elements, uint32_t fpbits);
170
+ MINISKETCH_API size_t minisketch_compute_capacity (uint32_t bits, size_t max_elements, uint32_t fpbits);
152
171
153
172
/* * Compute what max_elements can be decoded for a certain rate of false positives.
154
173
*
@@ -166,7 +185,7 @@ size_t minisketch_compute_capacity(uint32_t bits, size_t max_elements, uint32_t
166
185
* chance of 1 in 2^18.5). Therefore, minisketch_compute_max_elements with
167
186
* capacity=9 will return 9.
168
187
*/
169
- size_t minisketch_compute_max_elements (uint32_t bits, size_t capacity, uint32_t fpbits);
188
+ MINISKETCH_API size_t minisketch_compute_max_elements (uint32_t bits, size_t capacity, uint32_t fpbits);
170
189
171
190
#ifdef __cplusplus
172
191
}
0 commit comments