acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
cast.h
1//
2// Created by camilo on 2024-10-25 00:28 <3ThomasBorregaardSorensen!!
3//
4#pragma once
5
6
7
8template < typename TYPE >
9class cast
10{
11public:
12
13
14 TYPE * m_p;
15
16
17 cast()
18 {
19
20 m_p = nullptr;
21
22 }
23
24
25 template < typename TYPE2 >
26 cast(const TYPE2 * p2)
27 {
28
29 m_p = dynamic_cast < TYPE *>((TYPE2 *)(p2));
30
31 }
32
33
34 template < typename TYPE2 >
35 cast(const ::pointer < TYPE2 > & p2)
36 {
37
38 m_p = dynamic_cast < TYPE *>((::subparticle *)(p2.m_psubparticle));
39
40 }
41
42
43 template < typename TYPE2 >
44 cast(const ::cast < TYPE2 > & p2)
45 {
46
47 m_p = dynamic_cast <TYPE *>((::subparticle *)(p2.m_p));
48
49 }
50
51
52 operator TYPE *()
53 {
54
55 return m_p;
56
57 }
58
59
60 operator const TYPE * () const
61 {
62
63 return m_p;
64
65 }
66
67
68 TYPE * operator ->()
69 {
70
71 return m_p;
72
73 }
74
75
76 TYPE * operator ->() const
77 {
78
79 return m_p;
80
81 }
82
83
84 TYPE & operator *()
85 {
86
87 return *m_p;
88
89 }
90
91
92 const TYPE & operator *() const
93 {
94
95 return *m_p;
96
97 }
98
99
100 cast& operator = (nullptr_t)
101 {
102
103 m_p = nullptr;
104
105 return *this;
106
107 }
108
109
110
111 template < typename TYPE2 >
112 cast & operator = (const TYPE2 * p2)
113 {
114
115 m_p = dynamic_cast <TYPE *>((TYPE2 *)(p2));
116
117 return *this;
118
119 }
120
121
122 template < typename TYPE2 >
123 cast& operator = (const ::pointer < TYPE2 >& p2);
124
125
126 template < typename TYPE2 >
127 cast & operator = (const ::cast < TYPE2 > & p2)
128 {
129
130 m_p = dynamic_cast <TYPE *>((::subparticle *)(p2.m_p));
131
132 return *this;
133
134 }
135
136
137};
138
Definition subparticle.h:78