diff options
| author | Jussi Pakkanen <jussi.pakkanen@canonical.com> | 2011-04-28 14:46:17 +0200 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2011-04-28 15:19:03 +0200 |
| commit | 753f11f3881eac51da49c5bb2c2eebc99bd47410 (patch) | |
| tree | b3a5906f6751116efd26fdd6951e7d2f82f0b38f /include/grail-bits.h | |
| parent | b2a967eea554fce9fdec21f5e19c9608406f530c (diff) | |
Use visibility macros instead of symbol map
Signed-off-by: Jussi Pakkanen <jussi.pakkanen@canonical.com>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'include/grail-bits.h')
| -rw-r--r-- | include/grail-bits.h | 33 |
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 @@ | |||
| 27 | extern "C" { | 27 | extern "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 | |||
| 30 | typedef unsigned char grail_mask_t; | 50 | typedef unsigned char grail_mask_t; |
| 31 | 51 | ||
| 32 | static inline void grail_mask_set(grail_mask_t *mask, int i) | 52 | static 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 | ||
| 55 | void grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); | 75 | void GRAIL_PUBLIC grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b, |
| 56 | void grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); | 76 | int bytes); |
| 77 | void GRAIL_PUBLIC grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, | ||
| 78 | int bytes); | ||
| 57 | 79 | ||
| 58 | int grail_mask_count(const grail_mask_t *mask, int bytes); | 80 | int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes); |
| 59 | int grail_mask_get_first(const grail_mask_t *mask, int bytes); | 81 | int GRAIL_PUBLIC grail_mask_get_first(const grail_mask_t *mask, int bytes); |
| 60 | int grail_mask_get_next(int i, const grail_mask_t *mask, int bytes); | 82 | int 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); \ |
