summaryrefslogtreecommitdiff
path: root/include/grail-bits.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/grail-bits.h')
-rw-r--r--include/grail-bits.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/include/grail-bits.h b/include/grail-bits.h
index c151c11..dfe5367 100644
--- a/include/grail-bits.h
+++ b/include/grail-bits.h
@@ -27,6 +27,26 @@
27extern "C" { 27extern "C" {
28#endif 28#endif
29 29
30/* Macros that set symbol visibilities in shared libraries properly.
31 * Adapted from http://gcc.gnu.org/wiki/Visibility
32 */
33
34#if defined _WIN32 || defined __CYGWIN__
35 #ifdef BUILDING_GRAIL
36 #define GRAIL_PUBLIC __declspec(dllexport)
37 #else
38 #define GRAIL_PUBLIC __declspec(dllimport)
39 #endif
40 #define GRAIL_PRIVATE
41#else
42 #if defined __GNUC__
43 #define GRAIL_PUBLIC __attribute__ ((visibility("default")))
44 #define GRAIL_PRIVATE __attribute__ ((visibility("hidden")))
45 #else
46 #error "Unsupported compiler."
47 #endif
48#endif
49
30typedef unsigned char grail_mask_t; 50typedef unsigned char grail_mask_t;
31 51
32static inline void grail_mask_set(grail_mask_t *mask, int i) 52static inline void grail_mask_set(grail_mask_t *mask, int i)
@@ -52,12 +72,15 @@ static inline int grail_mask_get(const grail_mask_t *mask, int i)
52 return (mask[i >> 3] >> (i & 7)) & 1; 72 return (mask[i >> 3] >> (i & 7)) & 1;
53} 73}
54 74
55void grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); 75void GRAIL_PUBLIC grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b,
56void grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); 76 int bytes);
77void GRAIL_PUBLIC grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b,
78 int bytes);
57 79
58int grail_mask_count(const grail_mask_t *mask, int bytes); 80int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes);
59int grail_mask_get_first(const grail_mask_t *mask, int bytes); 81int GRAIL_PUBLIC grail_mask_get_first(const grail_mask_t *mask, int bytes);
60int grail_mask_get_next(int i, const grail_mask_t *mask, int bytes); 82int GRAIL_PUBLIC grail_mask_get_next(int i, const grail_mask_t *mask,
83 int bytes);
61 84
62#define grail_mask_foreach(i, mask, bytes) \ 85#define grail_mask_foreach(i, mask, bytes) \
63 for (i = grail_mask_get_first(mask, bytes); \ 86 for (i = grail_mask_get_first(mask, bytes); \