1 #ifndef __DALI_COMMON_H__
2 #define __DALI_COMMON_H__
5 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 // Licensed under the Flora License, Version 1.0 (the License);
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://floralicense.org/license/
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an AS IS BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
21 * @addtogroup CAPI_DALI_FRAMEWORK
31 * Definitions for shared library support
33 * If a library is configured with --enable-exportall or --enable-debug
34 * then HIDE_DALI_INTERNALS is not defined, and nothing is hidden.
35 * If it is configured without these options (the default), then HIDE_INTERNALS
36 * is defined when building the library, visibility is automatically hidden, and the explicit
37 * defines below come into use.
38 * When building a library that uses DALI, HIDE_DALI_INTERNALS
41 # ifndef HIDE_DALI_INTERNALS
42 # define DALI_EXPORT_API
43 # define DALI_IMPORT_API
44 # define DALI_INTERNAL
46 # define DALI_EXPORT_API __attribute__ ((visibility ("default")))
47 # define DALI_IMPORT_API __attribute__ ((visibility ("default")))
48 # define DALI_INTERNAL __attribute__ ((visibility ("hidden")))
51 # define DALI_EXPORT_API
52 # define DALI_IMPORT_API
53 # define DALI_INTERNAL
56 #if defined (__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
60 // C++0x not supported
67 * Method to log assertion message in DALI_ASSERT_ALWAYS macro below
68 * @param[in] condition The assertion condition
69 * @param[in] file The file in which the assertion occurred
70 * @param[in] line The line number at which the assertion occured
72 DALI_IMPORT_API void DaliAssertMessage(const char* condition, const char* file, int line);
75 * Exception class for Dali Core library - Raised by assertions in codebase.
77 class DALI_IMPORT_API DaliException
81 * Constructor. Will always display a backtrace when raised in a debug build.
83 * @param[in] location - the location of the assertion
84 * @param[in] condition - The assertion condition
86 DALI_IMPORT_API DaliException(const char *location, const char* condition);
88 std::string mLocation;
89 std::string mCondition;
95 * An invariant concurrent assertion to ensure its argument always evaluates TRUE
96 * Use this for rules that must always be true regardless of build options.
97 * For example, Actor must only ever have one parent.
98 * To be clear, this test remains compiled into release builds that are deployed
100 * Semantically, a failure of this test is signalling that dali is giving up and
102 * Since we don't catch the exception, a failure on any thread other than event
103 * will propagate up the call stack and kill that thread.
104 * A failure on the event thread may give the application an opportunity to
105 * recover if there is an application-written exception handler on the call
106 * stack between the throw site and the thread root and the application is built
107 * with a compatible ABI.
108 * Handle this macro with care at the level you would if it expanded to:
109 * if(!cond) { exit(EXIT_FAILURE); }
110 * (which it is often equivalent to in effect).
111 * It should not be used for simple parameter validation for instance.
113 #define DALI_ASSERT_ALWAYS(cond) \
116 Dali::DaliAssertMessage(#cond, __FILE__, __LINE__); \
117 throw Dali::DaliException(__PRETTY_FUNCTION__, #cond); \
121 * An invariant concurrent assertion to ensure its argument evaluates TRUE in debug builds
122 * Use this to sanity check algorithms and prevent internal programming errors
124 #if defined(DEBUG_ENABLED)
125 #define DALI_ASSERT_DEBUG(cond) DALI_ASSERT_ALWAYS(cond)
127 #define DALI_ASSERT_DEBUG(cond)
133 #endif // __DALI_COMMON_H__