EventAnalysis  1.3.0
Traits.h
Go to the documentation of this file.
1 /*
2  * Traits.h
3  *
4  * Created on: 18 Dec 2017
5  * Author: Nicola Mori
6  */
7 
8 #ifndef TRAITS_H_
9 #define TRAITS_H_
10 
11 #include <list>
12 #include <memory>
13 #include <type_traits>
14 #include <vector>
15 
16 namespace EA {
17 // Traits for contained objects
18 template <template <typename> class test, typename T> struct smart_test : test<T> {};
19 template <template <typename> class test, typename T, typename A>
20 struct smart_test<test, std::vector<T, A>> : smart_test<test, typename std::decay<T>::type> {};
21 template <template <typename> class test, typename T, typename A>
22 struct smart_test<test, std::list<T, A>> : smart_test<test, typename std::decay<T>::type> {};
23 
24 template <typename T>
26 
27 // Logical operators (see http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0013r1.html)
28 template <class...> struct or_; // not defined
29 template <> struct or_<> : std::false_type {};
30 template <class B1, class B2> struct or_<B1, B2> : std::conditional_t<B1::value, B1, B2> {};
31 
32 template <class...> struct and_; // not defined
33 template <> struct and_<> : std::true_type {};
34 template <class B1, class B2> struct and_<B1, B2> : std::conditional_t<B1::value, B2, B1> {};
35 
36 template <class T> struct not_ : std::conditional_t<T::value, std::false_type, std::true_type> {};
37 
38 // Pointer traits for detecting a pointer (possibly smart) to object
39 namespace _Private {
40 template <class T> struct is_pointer_helper : std::false_type {};
41 
42 template <class T> struct is_pointer_helper<T *> : std::true_type {};
43 
44 template <class T> struct is_pointer_helper<std::shared_ptr<T>> : std::true_type {};
45 
46 template <class T> struct is_pointer_helper<std::unique_ptr<T>> : std::true_type {};
47 
48 } // namespace _Private
49 
50 template <class T> struct is_pointer : _Private::is_pointer_helper<typename std::remove_cv<T>::type> {};
51 
52 } // namespace EA
53 #endif /* TRAITS_H_ */
Definition: Traits.h:50
Definition: Traits.h:18
Definition: Traits.h:34
IncludeFileExc.h IncludeFileExc class declaration.
Definition: Algorithm.h:21
Definition: Traits.h:32
Definition: Traits.h:33
Definition: Traits.h:29
Definition: Traits.h:28
Definition: Traits.h:36
Definition: Traits.h:40
Definition: Traits.h:30