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