-#ifndef __DALI_COMMON_H__
-#define __DALI_COMMON_H__
+#ifndef DALI_COMMON_H
+#define DALI_COMMON_H
/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* Definitions for shared library support.
*
- * If a library is configured with --enable-exportall or --enable-debug
+ * If a library is built with -DENABLE_EXPORTALL=ON or -DENABLE_DEBUG=ON
* then HIDE_DALI_INTERNALS is not defined, and nothing is hidden.
- * If it is configured without these options (the default), then HIDE_INTERNALS
+ * If it is built without these options (the default), then HIDE_INTERNALS
* is defined when building the library, visibility is automatically hidden, and the explicit
* defines below come into use.
* When building a library that uses DALI, HIDE_DALI_INTERNALS.
# ifndef HIDE_DALI_INTERNALS
# define DALI_EXPORT_API
# define DALI_IMPORT_API
+# define DALI_CORE_API
# define DALI_INTERNAL
# else
# define DALI_EXPORT_API __attribute__ ((visibility ("default")))
# define DALI_IMPORT_API __attribute__ ((visibility ("default")))
+# define DALI_CORE_API __attribute__ ((visibility ("default")))
# define DALI_INTERNAL __attribute__ ((visibility ("hidden")))
# endif
#else
-/** Visibility attribute to show method definitions */
+#ifdef WIN32
+ /** Visibility attribute to show declarations */
+# define DALI_EXPORT_API __declspec(dllexport)
+
+#ifdef BUILDING_DALI_CORE
+ /** Visibility attribute to hide declarations */
+# define DALI_CORE_API __declspec(dllexport)
+#else
+/** Visibility attribute to hide declarations */
+# define DALI_CORE_API __declspec(dllimport)
+#endif
+
+#else
+ /** Visibility attribute to show declarations */
# define DALI_EXPORT_API
/** Visibility attribute to show declarations */
# define DALI_IMPORT_API
+/** Visibility attribute to show declarations */
+# define DALI_CORE_API
+#endif
/** Visibility attribute to hide declarations */
# define DALI_INTERNAL
#endif
* DALI_UNLIKELY should be used when a branch is almost never taken.
* @SINCE_1_0.0
*/
+#ifdef __GNUC
#define DALI_LIKELY(expression) __builtin_expect( !!(expression), 1 )
#define DALI_UNLIKELY(expression) __builtin_expect( !!(expression), 0 )
+#else
+#define DALI_LIKELY(expression) !!(expression)
+#define DALI_UNLIKELY(expression) !!(expression)
+#endif
/**
* @brief The DALi namespace.
* @param[in] location Where the assertion occurred
* @param[in] condition The assertion condition
*/
-DALI_IMPORT_API void DaliAssertMessage( const char* location, const char* condition );
+DALI_CORE_API void DaliAssertMessage( const char* location, const char* condition );
/**
* @brief Exception class for Dali Core library - Raised by assertions in codebase.
* @SINCE_1_0.0
*/
-class DALI_IMPORT_API DaliException
+class DALI_CORE_API DaliException
{
public:
/**
* @SINCE_1_0.0
*/
#if defined(DEBUG_ENABLED)
+#if defined(WIN32)
+#define ASSERT_LOCATION __FUNCSIG__
+#else
#define ASSERT_LOCATION __PRETTY_FUNCTION__
+#endif
#else
#define ASSERT_LOCATION NULL
#endif
#define DALI_ASSERT_DEBUG(cond)
#endif
-#endif // __DALI_COMMON_H__
+/// Use DALI_FALLTHROUGH in switch statements where one case is supposed to fall through into another case
+#if __has_cpp_attribute(fallthrough)
+#define DALI_FALLTHROUGH [[fallthrough]]
+#else
+#define DALI_FALLTHROUGH
+#endif
+
+#endif // DALI_COMMON_H