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_>
9 requires details::base_of<_T2_, _T_>
10 QList<_T2_*> listCast(const QList<_T_*>& _list)
11 {
12#pragma GCC diagnostic ignored "-Wstrict-aliasing"
13 return *reinterpret_cast<const QList<_T2_*>*>(&_list);
14#pragma GCC diagnostic error "-Wstrict-aliasing"
15 }
16 template<typename _T_>
17 const QList<_T_>& listCast(const QList<_T_>& _list)
18 {
19 return _list;
20 }
21 template<typename _T2_, typename _T_>
22 requires details::base_of<typename _T2_::Type, _T_>
23 QList<_T2_> listCast(const QList<ConstExplicitlySharedDataPointer<_T_>>& _list)
24 {
25#pragma GCC diagnostic ignored "-Wstrict-aliasing"
26 return *reinterpret_cast<const QList<_T2_>*>(&_list);
27#pragma GCC diagnostic error "-Wstrict-aliasing"
28 }
29 template<typename _T2_, typename _T_>
30 requires(std::is_base_of_v<_T2_, _T_>)
31 QList<const _T2_*> listCast(const QList<ConstExplicitlySharedDataPointer<_T_>>& _list)
32 {
33 QList<const _T2_*> transitions;
34 for(const ConstExplicitlySharedDataPointer<_T_>& t : _list)
35 {
36 transitions.append(t.data());
37 }
38 return transitions;
39 }
40 template<typename _T2_, typename _T_>
41 requires(not details::base_of<_T2_, _T_>)
42 and std::convertible_to<_T_, _T2_> and (not std::same_as<_T_, _T2_>)
43 QList<_T2_> listCast(const QList<_T_>& _list)
44 {
45 QList<_T2_> transitions;
46 for(const _T_& t : _list)
47 {
48 transitions.append(t);
49 }
50 return transitions;
51 }
52 template<typename _T_>
53 QVector<_T_> vectorCast(const QList<_T_>& _list)
54 {
55 QVector<_T_> transitions;
56 std::copy(_list.begin(), _list.end(), std::back_inserter(transitions));
57 return transitions;
58 }
59} // namespace knowCore
Definition Forward.h:14