Merge "Prevents an invalid texture cache being interrogated for a texture. This ...
[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  */
32 template <typename Type>
33 struct BasicTypes
34 {
35   /**
36    * This flag tells Dali if a class can be considered POD. If it declares copy constructor and/or destructor, its not considered trivial
37    * and cannot be copied by using memcpy etc.
38    */
39   enum { IS_TRIVIAL_TYPE = __has_trivial_destructor(Type) && __has_trivial_copy(Type) };
40 };
41
42 /**
43  * @brief Type traits support
44  * An example of overriding a traits flag for a custom type can be done by:
45  * <code>
46  * namespace Dali
47  * {
48  *   /// Tell DALi that Matrix is POD, even though it has a copy constructor
49  *   template <> struct TypeTraits< Matrix > : public BasicTypes< Matrix > { enum { IS_TRIVIAL_TYPE = true }; };
50  * }
51  * </code>
52  */
53 template <typename Type>
54 struct TypeTraits : public BasicTypes< Type >
55 {
56 };
57
58 /**
59  * @}
60  */
61 } // namespace Dali
62
63 #endif /* __DALI_TYPE_TRAITS_H__ */