acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
typed.h
1// From acme/include/_.h 2022-11-09 00:22 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5template<class TYPE>
6inline auto& __typed(TYPE& t) { return t; }
7
8
9template<class POINTER_TYPE>
10inline auto& __typed(POINTER_TYPE* p) { return *p; }
11
12
13template<class POINTER_POINTER_TYPE>
14inline auto& __typed(POINTER_POINTER_TYPE** p) { return **p; }
15
16
17template<class TYPE>
18inline auto& __typed_defer_new(TYPE& t) { return t; }
19
20
21template<class POINTER_TYPE>
22inline auto& __typed_defer_new(POINTER_TYPE*& p)
23{
24 if (!p) { p = ___new POINTER_TYPE(); }
25 return *p;
26}
27
28
29template<class POINTER_POINTER_TYPE>
30inline auto& __typed_defer_new(POINTER_POINTER_TYPE** p)
31{
32 if (!*p) { *p = ___new POINTER_POINTER_TYPE(); }
33 return **p;
34}
35
36
37
38template < typename TYPE >
39inline void __dynamic_cast(TYPE*& ptarget, const TYPE* psource)
40{
41
42 ptarget = (TYPE*)psource;
43
44}
45
46
47template<typename TARGET, typename SOURCE>
48inline void __dynamic_cast(TARGET*& ptarget, const SOURCE* psource)
49{
50
51 ptarget = dynamic_cast <TARGET*> ((SOURCE*)psource);
52
53}
54
55
56