cannam@226: /*
cannam@226:   Copyright 2012 David Robillard <http://drobilla.net>
cannam@226: 
cannam@226:   Permission to use, copy, modify, and/or distribute this software for any
cannam@226:   purpose with or without fee is hereby granted, provided that the above
cannam@226:   copyright notice and this permission notice appear in all copies.
cannam@226: 
cannam@226:   THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
cannam@226:   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
cannam@226:   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
cannam@226:   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
cannam@226:   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
cannam@226:   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
cannam@226:   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
cannam@226: */
cannam@226: 
cannam@226: #ifndef ZIX_COMMON_H
cannam@226: #define ZIX_COMMON_H
cannam@226: 
cannam@226: /**
cannam@226:    @addtogroup zix
cannam@226:    @{
cannam@226: */
cannam@226: 
cannam@226: /** @cond */
cannam@226: #ifdef ZIX_SHARED
cannam@226: #    ifdef _WIN32
cannam@226: #        define ZIX_LIB_IMPORT __declspec(dllimport)
cannam@226: #        define ZIX_LIB_EXPORT __declspec(dllexport)
cannam@226: #    else
cannam@226: #        define ZIX_LIB_IMPORT __attribute__((visibility("default")))
cannam@226: #        define ZIX_LIB_EXPORT __attribute__((visibility("default")))
cannam@226: #    endif
cannam@226: #    ifdef ZIX_INTERNAL
cannam@226: #        define ZIX_API ZIX_LIB_EXPORT
cannam@226: #    else
cannam@226: #        define ZIX_API ZIX_LIB_IMPORT
cannam@226: #    endif
cannam@226: #    define ZIX_PRIVATE static
cannam@226: #elif defined(ZIX_INLINE)
cannam@226: #    define ZIX_API     static inline
cannam@226: #    define ZIX_PRIVATE static inline
cannam@226: #else
cannam@226: #    define ZIX_API
cannam@226: #    define ZIX_PRIVATE static
cannam@226: #endif
cannam@226: /** @endcond */
cannam@226: 
cannam@226: #ifdef __cplusplus
cannam@226: extern "C" {
cannam@226: #else
cannam@226: #    include <stdbool.h>
cannam@226: #endif
cannam@226: 
cannam@226: typedef enum {
cannam@226: 	ZIX_STATUS_SUCCESS,
cannam@226: 	ZIX_STATUS_ERROR,
cannam@226: 	ZIX_STATUS_NO_MEM,
cannam@226: 	ZIX_STATUS_NOT_FOUND,
cannam@226: 	ZIX_STATUS_EXISTS,
cannam@226: 	ZIX_STATUS_BAD_ARG,
cannam@226: 	ZIX_STATUS_BAD_PERMS,
cannam@226: } ZixStatus;
cannam@226: 
cannam@226: /**
cannam@226:    Function for comparing two elements.
cannam@226: */
cannam@226: typedef int (*ZixComparator)(const void* a, const void* b, void* user_data);
cannam@226: 
cannam@226: /**
cannam@226:    Function for testing equality of two elements.
cannam@226: */
cannam@226: typedef bool (*ZixEqualFunc)(const void* a, const void* b);
cannam@226: 
cannam@226: /**
cannam@226:    Function to destroy an element.
cannam@226: */
cannam@226: typedef void (*ZixDestroyFunc)(void* ptr);
cannam@226: 
cannam@226: /**
cannam@226:    @}
cannam@226: */
cannam@226: 
cannam@226: #ifdef __cplusplus
cannam@226: }  /* extern "C" */
cannam@226: #endif
cannam@226: 
cannam@226: #endif  /* ZIX_COMMON_H */