Mercurial > almixer_isolated
diff LinkedList.h @ 54:516da6d93534
Added explicit symbol visibility markers to support files in ALmixer for public headers so they can be built as a dynamic library if needed.
author | Eric Wing <ewing@anscamobile.com> |
---|---|
date | Tue, 29 May 2012 19:40:38 -0700 |
parents | a8d96c934e77 |
children | 36644b1b940b |
line wrap: on
line diff
--- a/LinkedList.h Wed Jan 18 12:17:42 2012 -0800 +++ b/LinkedList.h Tue May 29 19:40:38 2012 -0700 @@ -30,36 +30,76 @@ extern "C" { #endif + +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +/** @cond DOXYGEN_SHOULD_IGNORE_THIS */ + +/* Note: For Doxygen to produce clean output, you should set the + * PREDEFINED option to remove C_LINKED_LIST_DECLSPEC, C_LINKED_LIST_CALL, and + * the DOXYGEN_SHOULD_IGNORE_THIS blocks. + * PREDEFINED = DOXYGEN_SHOULD_IGNORE_THIS=1 C_LINKED_LIST_DECLSPEC= C_LINKED_LIST_CALL= + */ + +/** Windows needs to know explicitly which functions to export in a DLL. */ +#if defined(_WIN32) + #if defined(C_LINKED_LIST_BUILD_LIBRARY) + #define C_LINKED_LIST_DECLSPEC __declspec(dllexport) + #else + #define C_LINKED_LIST_DECLSPEC __declspec(dllimport) + #endif +#else + #if defined(C_LINKED_LIST_BUILD_LIBRARY) + #if defined (__GNUC__) && __GNUC__ >= 4 + #define C_LINKED_LIST_DECLSPEC __attribute__((visibility("default"))) + #else + #define C_LINKED_LIST_DECLSPEC + #endif + #else + #define C_LINKED_LIST_DECLSPEC + #endif +#endif + +/* For Windows, by default, use the C calling convention */ +#if defined(_WIN32) + #define C_LINKED_LIST_CALL __cdecl +#else + #define C_LINKED_LIST_CALL +#endif + +/** @endcond DOXYGEN_SHOULD_IGNORE_THIS */ +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ + + #include <stddef.h> typedef struct LinkedListNode LinkedListNode; typedef struct LinkedList LinkedList; -LinkedList* LinkedList_Create(); +extern C_LINKED_LIST_DECLSPEC LinkedList* C_LINKED_LIST_CALL LinkedList_Create(void); -void LinkedList_Free(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC void C_LINKED_LIST_CALL LinkedList_Free(LinkedList* linked_list); -void* LinkedList_Front(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC void* C_LINKED_LIST_CALL LinkedList_Front(LinkedList* linked_list); -void* LinkedList_Back(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC void* C_LINKED_LIST_CALL LinkedList_Back(LinkedList* linked_list); -unsigned int LinkedList_PushFront(LinkedList* linked_list, void* new_item); +extern C_LINKED_LIST_DECLSPEC unsigned int C_LINKED_LIST_CALL LinkedList_PushFront(LinkedList* linked_list, void* new_item); -unsigned int LinkedList_PushBack(LinkedList* linked_list, void* new_item); +extern C_LINKED_LIST_DECLSPEC unsigned int C_LINKED_LIST_CALL LinkedList_PushBack(LinkedList* linked_list, void* new_item); -void* LinkedList_PopFront(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC void* C_LINKED_LIST_CALL LinkedList_PopFront(LinkedList* linked_list); -void* LinkedList_PopBack(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC void* C_LINKED_LIST_CALL LinkedList_PopBack(LinkedList* linked_list); -size_t LinkedList_Size(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC size_t C_LINKED_LIST_CALL LinkedList_Size(LinkedList* linked_list); -void LinkedList_Clear(LinkedList* linked_list); +extern C_LINKED_LIST_DECLSPEC void C_LINKED_LIST_CALL LinkedList_Clear(LinkedList* linked_list); -void* LinkedListNode_GetData(LinkedListNode* list_node); +extern C_LINKED_LIST_DECLSPEC void* C_LINKED_LIST_CALL LinkedListNode_GetData(LinkedListNode* list_node); -LinkedListNode* LinkedList_Find(LinkedList* linked_list, void* the_data, LinkedListNode* start_node); +extern C_LINKED_LIST_DECLSPEC LinkedListNode* C_LINKED_LIST_CALL LinkedList_Find(LinkedList* linked_list, void* the_data, LinkedListNode* start_node); -unsigned int LinkedList_Remove(LinkedList* linked_list, LinkedListNode* list_node); +extern C_LINKED_LIST_DECLSPEC unsigned int C_LINKED_LIST_CALL LinkedList_Remove(LinkedList* linked_list, LinkedListNode* list_node); /* Ends C function definitions when using C++ */ #ifdef __cplusplus