From 8db6c9d0774a6cd43a3fa912f10f453c7685ba55 Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Tue, 15 Jan 2013 16:45:01 +0100 Subject: [PATCH] c-lib: add DLL import/export directives --- qmake.build/c/libstl/libstl.pro | 6 ++-- src/c/endian.h | 32 ++++++++--------- src/c/foug_global.h | 10 ++++++ src/c/libstl/{stlb_global.h => stl_global.h} | 11 ++++++ src/c/libstl/stlb_read.c | 1 - src/c/libstl/stlb_read.h | 6 +++- src/c/libstl/stlb_write.c | 5 ++- src/c/libstl/stlb_write.h | 18 +++++----- src/c/stream.h | 20 ++++++----- src/c/task_control.h | 38 +++++++++++--------- 10 files changed, 88 insertions(+), 59 deletions(-) rename src/c/libstl/{stlb_global.h => stl_global.h} (50%) diff --git a/qmake.build/c/libstl/libstl.pro b/qmake.build/c/libstl/libstl.pro index 686fff0..476bbe5 100644 --- a/qmake.build/c/libstl/libstl.pro +++ b/qmake.build/c/libstl/libstl.pro @@ -9,10 +9,10 @@ message($$PREFIX_DIR) TEMPLATE = lib TARGET = fougstl-c$$TARGET_SUFFIX DESTDIR = $$PREFIX_DIR/lib -CONFIG *= dll dll { - DEFINES *= FOUG_STL_DLL FOUG_STL_MAKE_DLL + DEFINES *= FOUG_LIB_DLL FOUG_LIB_MAKE_DLL + DEFINES *= FOUG_DATAEX_LIBSTL_DLL FOUG_DATAEX_LIBSTL_MAKE_DLL } #*g++*:QMAKE_CXXFLAGS_RELEASE -= -O2 @@ -26,7 +26,7 @@ HEADERS += \ ../../../src/c/memory.h \ ../../../src/c/stream.h \ ../../../src/c/task_control.h \ - ../../../src/c/libstl/stlb_global.h \ + ../../../src/c/libstl/stl_global.h \ ../../../src/c/libstl/stlb_read.h \ ../../../src/c/libstl/stlb_write.h \ ../../../src/c/libstl/triangle.h diff --git a/src/c/endian.h b/src/c/endian.h index 3783d67..5b958b4 100644 --- a/src/c/endian.h +++ b/src/c/endian.h @@ -11,24 +11,24 @@ typedef enum FOUG_OTHER_ENDIAN } foug_endianness_t; -foug_endianness_t foug_host_endianness(); +FOUG_LIB_EXPORT foug_endianness_t foug_host_endianness(); -uint16_t foug_uint16_swap(uint16_t val); -uint16_t foug_uint16_noswap(uint16_t val); -uint16_t foug_decode_uint16_le(const uint8_t* bytes); -uint16_t foug_decode_uint16_be(const uint8_t* bytes); -void foug_encode_uint16_le(uint16_t val, uint8_t* bytes); +FOUG_LIB_EXPORT uint16_t foug_uint16_swap(uint16_t val); +FOUG_LIB_EXPORT uint16_t foug_uint16_noswap(uint16_t val); +FOUG_LIB_EXPORT uint16_t foug_decode_uint16_le(const uint8_t* bytes); +FOUG_LIB_EXPORT uint16_t foug_decode_uint16_be(const uint8_t* bytes); +FOUG_LIB_EXPORT void foug_encode_uint16_le(uint16_t val, uint8_t* bytes); -uint32_t foug_uint32_swap(uint32_t val); -uint32_t foug_uint32_noswap(uint32_t val); -uint32_t foug_decode_uint32_le(const uint8_t* bytes); -uint32_t foug_decode_uint32_me(const uint8_t* bytes); -uint32_t foug_decode_uint32_be(const uint8_t* bytes); -void foug_encode_uint32_le(uint32_t val, uint8_t* bytes); +FOUG_LIB_EXPORT uint32_t foug_uint32_swap(uint32_t val); +FOUG_LIB_EXPORT uint32_t foug_uint32_noswap(uint32_t val); +FOUG_LIB_EXPORT uint32_t foug_decode_uint32_le(const uint8_t* bytes); +FOUG_LIB_EXPORT uint32_t foug_decode_uint32_me(const uint8_t* bytes); +FOUG_LIB_EXPORT uint32_t foug_decode_uint32_be(const uint8_t* bytes); +FOUG_LIB_EXPORT void foug_encode_uint32_le(uint32_t val, uint8_t* bytes); -foug_real32_t foug_decode_real32_le(const uint8_t* bytes); -foug_real32_t foug_decode_real32_me(const uint8_t* bytes); -foug_real32_t foug_decode_real32_be(const uint8_t* bytes); -void foug_encode_real32_le(foug_real32_t val, uint8_t* bytes); +FOUG_LIB_EXPORT foug_real32_t foug_decode_real32_le(const uint8_t* bytes); +FOUG_LIB_EXPORT foug_real32_t foug_decode_real32_me(const uint8_t* bytes); +FOUG_LIB_EXPORT foug_real32_t foug_decode_real32_be(const uint8_t* bytes); +FOUG_LIB_EXPORT void foug_encode_real32_le(foug_real32_t val, uint8_t* bytes); #endif /* FOUG_ENDIAN_H */ diff --git a/src/c/foug_global.h b/src/c/foug_global.h index 1a9512e..2999d60 100644 --- a/src/c/foug_global.h +++ b/src/c/foug_global.h @@ -10,6 +10,16 @@ # define FOUG_DECL_IMPORT #endif /* WIN */ +#ifdef FOUG_LIB_DLL +# ifdef FOUG_LIB_MAKE_DLL +# define FOUG_LIB_EXPORT FOUG_DECL_EXPORT +# else +# define FOUG_LIB_EXPORT FOUG_DECL_IMPORT +# endif /* APP_LIBCORE_MAKE_DLL */ +#else +# define FOUG_LIB_EXPORT +#endif /* FOUG_LIB_DLL */ + #ifdef FOUG_USE_STDINT_H # include #else diff --git a/src/c/libstl/stlb_global.h b/src/c/libstl/stl_global.h similarity index 50% rename from src/c/libstl/stlb_global.h rename to src/c/libstl/stl_global.h index 549eb94..ce6c06e 100644 --- a/src/c/libstl/stlb_global.h +++ b/src/c/libstl/stl_global.h @@ -3,6 +3,17 @@ #include "../foug_global.h" +#ifdef FOUG_DATAEX_LIBSTL_DLL +# ifdef FOUG_DATAEX_LIBSTL_MAKE_DLL +# define FOUG_DATAEX_LIBSTL_EXPORT FOUG_DECL_EXPORT +# else +# define FOUG_DATAEX_LIBSTL_EXPORT FOUG_DECL_IMPORT +# endif /* APP_LIBCORE_MAKE_DLL */ +#else +# define FOUG_DATAEX_LIBSTL_EXPORT +#endif /* FOUG_DATAEX_LIBSTL_DLL */ + +/* STLB */ #define FOUG_STLB_HEADER_SIZE 80 #define FOUG_STLB_MIN_CONTENTS_SIZE 284 #define FOUG_STLB_TRIANGLE_SIZE 50 /* 12 * sizeof(foug_real32_t) + sizeof(uint16_t) */ diff --git a/src/c/libstl/stlb_read.c b/src/c/libstl/stlb_read.c index 37669ba..8e37ed3 100644 --- a/src/c/libstl/stlb_read.c +++ b/src/c/libstl/stlb_read.c @@ -1,5 +1,4 @@ #include "stlb_read.h" -#include "stlb_global.h" #include "../endian.h" diff --git a/src/c/libstl/stlb_read.h b/src/c/libstl/stlb_read.h index fda98b4..91232f8 100644 --- a/src/c/libstl/stlb_read.h +++ b/src/c/libstl/stlb_read.h @@ -1,8 +1,8 @@ #ifndef FOUG_C_LIBSTL_STLB_READ_H #define FOUG_C_LIBSTL_STLB_READ_H +#include "stl_global.h" #include "triangle.h" -#include "../foug_global.h" #include "../stream.h" #include "../task_control.h" @@ -23,10 +23,12 @@ typedef struct foug_stlb_geom_input_end_triangles_func_t end_triangles_func; } foug_stlb_geom_input_manip_t; +FOUG_DATAEX_LIBSTL_EXPORT foug_stlb_geom_input_t* foug_stlb_geom_input_create(foug_malloc_func_t func, void* data, foug_stlb_geom_input_manip_t manip); +FOUG_DATAEX_LIBSTL_EXPORT void* foug_stlb_geom_input_get_cookie(const foug_stlb_geom_input_t* geom); typedef struct @@ -36,6 +38,8 @@ typedef struct foug_task_control_t* task_control; uint32_t buffer_size; } foug_stlb_read_args_t; + +FOUG_DATAEX_LIBSTL_EXPORT int foug_stlb_read(foug_stlb_read_args_t args); #define FOUG_STLB_READ_NO_ERROR 0 diff --git a/src/c/libstl/stlb_write.c b/src/c/libstl/stlb_write.c index d24027f..1157a52 100644 --- a/src/c/libstl/stlb_write.c +++ b/src/c/libstl/stlb_write.c @@ -1,6 +1,5 @@ #include "stlb_write.h" -#include "stlb_global.h" #include "../endian.h" #include @@ -57,7 +56,7 @@ int foug_stlb_write(foug_stlb_write_args_t args) memset(header_data, 0, FOUG_STLB_HEADER_SIZE); if (foug_stream_write(args.stream, header_data, FOUG_STLB_HEADER_SIZE, 1) != 1) - return FOUG_STLB_WRITE_HEADER_ERROR; + return FOUG_STLB_WRITE_STREAM_ERROR; /* Write facet count */ const uint32_t facet_count = (*(args.geom_output->manip.get_triangle_count_func))(args.geom_output); @@ -102,7 +101,7 @@ int foug_stlb_write(foug_stlb_write_args_t args) /* Write to stream */ if (foug_stream_write(args.stream, buffer, FOUG_STLB_TRIANGLE_SIZE, 1) != 1) - error = FOUG_STLB_WRITE_NULL_STREAM_ERROR; + error = FOUG_STLB_WRITE_STREAM_ERROR; /* Task control */ if (foug_stlb_no_error(error)) { diff --git a/src/c/libstl/stlb_write.h b/src/c/libstl/stlb_write.h index 0b9b086..4c5a442 100644 --- a/src/c/libstl/stlb_write.h +++ b/src/c/libstl/stlb_write.h @@ -1,13 +1,11 @@ #ifndef FOUG_C_LIBSTL_STLB_WRITE_H #define FOUG_C_LIBSTL_STLB_WRITE_H +#include "stl_global.h" #include "triangle.h" -#include "../foug_global.h" #include "../stream.h" #include "../task_control.h" -enum { foug_stlb_header_size = 80 }; - /* foug_stlb_geom_output : opaque structure */ typedef struct _internal_foug_stlb_geom_output foug_stlb_geom_output_t; typedef void (*foug_stlb_geom_output_get_header_func_t)(const foug_stlb_geom_output_t*, uint8_t*); @@ -24,10 +22,12 @@ typedef struct foug_stlb_geom_output_get_triangle_func_t get_triangle_func; } foug_stlb_geom_output_manip_t; +FOUG_DATAEX_LIBSTL_EXPORT foug_stlb_geom_output_t* foug_stlb_geom_output_create(foug_malloc_func_t func, void* data, foug_stlb_geom_output_manip_t manip); +FOUG_DATAEX_LIBSTL_EXPORT void* foug_stlb_geom_output_get_cookie(const foug_stlb_geom_output_t* geom); typedef struct @@ -37,6 +37,8 @@ typedef struct foug_task_control_t* task_control; uint32_t buffer_size; } foug_stlb_write_args_t; + +FOUG_DATAEX_LIBSTL_EXPORT int foug_stlb_write(foug_stlb_write_args_t args); #define FOUG_STLB_WRITE_NO_ERROR 0 @@ -44,12 +46,8 @@ int foug_stlb_write(foug_stlb_write_args_t args); #define FOUG_STLB_WRITE_NULL_STREAM_ERROR 2 #define FOUG_STLB_WRITE_NULL_GET_TRIANGLE_COUNT_FUNC 3 #define FOUG_STLB_WRITE_NULL_GET_TRIANGLE_FUNC 4 - -#define FOUG_STLB_WRITE_INVALID_BUFFER_SIZE_ERROR 3 -#define FOUG_STLB_WRITE_HEADER_ERROR 4 - -#define FOUG_STLB_WRITE_FACET_COUNT_ERROR 5 -#define FOUG_STLB_WRITE_STREAM_ERROR 6 -#define FOUG_STLB_WRITE_TASK_STOPPED_ERROR 7 +#define FOUG_STLB_WRITE_STREAM_ERROR 5 +#define FOUG_STLB_WRITE_TASK_STOPPED_ERROR 6 +#define FOUG_STLB_WRITE_INVALID_BUFFER_SIZE_ERROR 7 #endif /* FOUG_C_LIBSTL_STLB_WRITE_H */ diff --git a/src/c/stream.h b/src/c/stream.h index 2748c66..0aa0a7e 100644 --- a/src/c/stream.h +++ b/src/c/stream.h @@ -20,16 +20,20 @@ typedef struct foug_stream_write_func_t write_func; } foug_stream_manip_t; -foug_stream_manip_t foug_stream_manip_null(); -foug_stream_manip_t foug_stream_manip_stdio(); +FOUG_LIB_EXPORT foug_stream_manip_t foug_stream_manip_null(); +FOUG_LIB_EXPORT foug_stream_manip_t foug_stream_manip_stdio(); /* Services */ -foug_stream_t* foug_stream_create(foug_malloc_func_t func, void* data, foug_stream_manip_t manip); +FOUG_LIB_EXPORT foug_stream_t* foug_stream_create(foug_malloc_func_t func, + void* data, + foug_stream_manip_t manip); -foug_bool_t foug_stream_at_end(foug_stream_t* stream); -int foug_stream_error(foug_stream_t* stream); -size_t foug_stream_read(foug_stream_t* stream, void* ptr, size_t item_size, size_t item_count); -size_t foug_stream_write(foug_stream_t* stream, const void* ptr, size_t item_size, size_t item_count); -void* foug_stream_get_cookie(const foug_stream_t* stream); +FOUG_LIB_EXPORT foug_bool_t foug_stream_at_end(foug_stream_t* stream); +FOUG_LIB_EXPORT int foug_stream_error(foug_stream_t* stream); +FOUG_LIB_EXPORT size_t foug_stream_read(foug_stream_t* stream, + void* ptr, size_t item_size, size_t item_count); +FOUG_LIB_EXPORT size_t foug_stream_write(foug_stream_t* stream, + const void* ptr, size_t item_size, size_t item_count); +FOUG_LIB_EXPORT void* foug_stream_get_cookie(const foug_stream_t* stream); #endif /* FOUG_C_STREAM_H */ diff --git a/src/c/task_control.h b/src/c/task_control.h index 0201993..f7479a4 100644 --- a/src/c/task_control.h +++ b/src/c/task_control.h @@ -16,37 +16,41 @@ typedef struct foug_task_control_handle_progress_update_func handle_progress_update_func; } foug_task_control_manip_t; -void foug_task_control_manip_init(foug_task_control_manip_t* manip); +FOUG_LIB_EXPORT void foug_task_control_manip_init(foug_task_control_manip_t* manip); -foug_task_control_t* foug_task_control_create(foug_malloc_func_t func, - void* data, foug_task_control_manip_t manip); +FOUG_LIB_EXPORT foug_task_control_t* foug_task_control_create(foug_malloc_func_t func, + void* data, + foug_task_control_manip_t manip); /* Range */ -foug_real32_t foug_task_control_get_range_min(const foug_task_control_t* ctrl); -foug_real32_t foug_task_control_get_range_max(const foug_task_control_t* ctrl); -void foug_task_control_set_range(foug_task_control_t* ctrl, foug_real32_t min, foug_real32_t max); +FOUG_LIB_EXPORT foug_real32_t foug_task_control_get_range_min(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT foug_real32_t foug_task_control_get_range_max(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void foug_task_control_set_range(foug_task_control_t* ctrl, + foug_real32_t min, foug_real32_t max); /* Step id */ -int32_t foug_task_control_get_step_id(const foug_task_control_t* ctrl); -void foug_task_control_set_step_id(foug_task_control_t* ctrl, int32_t step_id); +FOUG_LIB_EXPORT int32_t foug_task_control_get_step_id(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void foug_task_control_set_step_id(foug_task_control_t* ctrl, int32_t step_id); /* Progress */ -foug_real32_t foug_task_control_get_progress_as_pc(const foug_task_control_t* ctrl); -foug_real32_t foug_task_control_get_progress(const foug_task_control_t* ctrl); -void foug_task_control_set_progress(foug_task_control_t* ctrl, foug_real32_t v); +FOUG_LIB_EXPORT foug_real32_t foug_task_control_get_progress_as_pc(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT foug_real32_t foug_task_control_get_progress(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void foug_task_control_set_progress(foug_task_control_t* ctrl, foug_real32_t v); +FOUG_LIB_EXPORT foug_real32_t foug_task_control_get_progress_update_threshold(const foug_task_control_t* ctrl); -void foug_task_control_set_progress_update_threshold(foug_task_control_t* ctrl, foug_real32_t v); +FOUG_LIB_EXPORT void foug_task_control_set_progress_update_threshold(foug_task_control_t* ctrl, + foug_real32_t v); /* Reset */ -void foug_task_control_reset(foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void foug_task_control_reset(foug_task_control_t* ctrl); /* Task stop */ -void foug_task_control_async_stop(foug_task_control_t* ctrl); -void foug_task_control_handle_stop(foug_task_control_t* ctrl); -foug_bool_t foug_task_control_is_stop_requested(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void foug_task_control_async_stop(foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void foug_task_control_handle_stop(foug_task_control_t* ctrl); +FOUG_LIB_EXPORT foug_bool_t foug_task_control_is_stop_requested(const foug_task_control_t* ctrl); /* Cookie */ -void* foug_task_control_get_cookie(const foug_task_control_t* ctrl); +FOUG_LIB_EXPORT void* foug_task_control_get_cookie(const foug_task_control_t* ctrl); #endif /* FOUG_C_TASK_CONTROL_H */