knowL: Knowledge Libraries
Loading...
Searching...
No Matches
Cast.h
1#include <type_traits>
2
3#include "ConstExplicitlySharedDataPointer.h"
4#include "Global.h"
5
6namespace knowCore
7{
8 template <typename _T2_, typename _T_> requires details::base_of<_T2_, _T_>
9 QList<_T2_*> listCast(const QList<_T_*>& _list)
10 {
11 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
12 return *reinterpret_cast<const QList<_T2_ *>*>(&_list);
13 #pragma GCC diagnostic error "-Wstrict-aliasing"
14 }
15 template <typename _T_>
16 const QList<_T_>& listCast(const QList<_T_>& _list)
17 {
18 return _list;
19 }
20 template <typename _T2_, typename _T_> requires details::base_of<typename _T2_::Type, _T_>
21 QList<_T2_> listCast(const QList<ConstExplicitlySharedDataPointer<_T_>>& _list)
22 {
23 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
24 return *reinterpret_cast<const QList<_T2_>*>(&_list);
25 #pragma GCC diagnostic error "-Wstrict-aliasing"
26 }
27 template <typename _T2_, typename _T_, typename std::enable_if<std::is_base_of<_T2_, _T_>::value, int>::type = 0>
28 QList<const _T2_*> listCast(const QList<ConstExplicitlySharedDataPointer<_T_>>& _list)
29 {
30 QList<const _T2_*> transitions;
31 for(const ConstExplicitlySharedDataPointer<_T_>& t : _list)
32 {
33 transitions.append(t.data());
34 }
35 return transitions;
36 }
37 template <typename _T2_, typename _T_> requires (not details::base_of<_T2_, _T_>) and std::convertible_to<_T_, _T2_> and (not std::same_as<_T_, _T2_>)
38 QList<_T2_> listCast(const QList< _T_>& _list)
39 {
40 QList<_T2_> transitions;
41 for(const _T_& t : _list)
42 {
43 transitions.append(t);
44 }
45 return transitions;
46 }
47 template <typename _T_>
48 QVector<_T_> vectorCast(const QList< _T_>& _list)
49 {
50 QVector<_T_> transitions;
51 std::copy(_list.begin(), _list.end(), std::back_inserter(transitions));
52 return transitions;
53 }
54}
55
Definition Forward.h:12