Apply the new doxygen tagging rule for @SINCE
[platform/core/uifw/dali-core.git] / dali / public-api / common / type-traits.h
1 #ifndef __DALI_TYPE_TRAITS_H__
2 #define __DALI_TYPE_TRAITS_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 namespace Dali
22 {
23 /**
24  * @addtogroup dali_core_common
25  * @{
26  */
27
28 /**
29  * @brief Basic type traits that every type has by default
30  * This allows specialisations to not have to repeat all flags
31  * @SINCE_1_0.0
32  */
33 template <typename Type>
34 struct BasicTypes
35 {
36   /**
37    * @brief This flag tells Dali if a class can be considered POD. If it declares copy constructor and/or destructor, its not considered trivial
38    * and cannot be copied by using memcpy etc.
39    * @SINCE_1_0.0
40    */
41   enum { IS_TRIVIAL_TYPE = __has_trivial_destructor(Type) && __has_trivial_copy(Type) };
42 };
43
44 /**
45  * @brief Type traits support
46  * An example of overriding a traits flag for a custom type can be done by:
47  * <code>
48  * namespace Dali
49  * {
50  *   /// Tell DALi that Matrix is POD, even though it has a copy constructor
51  *   template <> struct TypeTraits< Matrix > : public BasicTypes< Matrix > { enum { IS_TRIVIAL_TYPE = true }; };
52  * }
53  * </code>
54  * @SINCE_1_0.0
55  */
56 template <typename Type>
57 struct TypeTraits : public BasicTypes< Type >
58 {
59 };
60
61 /**
62  * @}
63  */
64 } // namespace Dali
65
66 #endif /* __DALI_TYPE_TRAITS_H__ */