acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
lparam.h
1#pragma once
2
3
4//#include "acme/prototype/geometry2d/point.h"
5#include "acme/prototype/prototype/pointer.h"
6
7
8class CLASS_DECL_ACME lparam
9{
10public:
11
12
13 iptr m_lparam;
14
15
16 constexpr lparam(nullptr_t = nullptr) { m_lparam = 0; }
17
18 template < prototype_integral_number INTEGRAL_NUMBER >
19 constexpr lparam(INTEGRAL_NUMBER i) { m_lparam = (iptr)i; }
20 template < prototype_size SIZE >
21 constexpr lparam(const SIZE & size):lparam((::i32)size.cx, (::i32) size.cy) {}
22 template < prototype_point POINT >
23 constexpr lparam(const POINT & point);
24 constexpr lparam(const wparam &wparam);
25 lparam(::i32 x, ::i32 y) { m_lparam = make_u32(x, y); }
26
27
29 inline lparam(void * p) { m_lparam = (iptr)p; }
30
31
33 lparam(const ::subparticle * psubparticle);
34
35#if REFERENCING_DEBUGGING
36
38 lparam(::subparticle * psubparticle, ::reference_referer * preferer);
39
40#endif
41
43 template < typename T >
44 inline lparam(const pointer < T > & p) : lparam((const ::subparticle *) p.m_p) { }
45 //template < typename T >
46 //inline lparam(const ptr < T > & p) : lparam((const ::subparticle *) p.m_p) { }
47
48 template < typename T >
49 inline lparam(pointer < T > && p) : lparam(p.m_p REFDBG(, p.m_preferer)) { p.m_p = nullptr; p.m_psubparticle = nullptr; REFDBG(p.m_preferer = nullptr); }
50 //template < typename T >
51 //inline lparam(ptr < T > && p) : lparam(p.m_p REFDBG(, p.m_preferer)) { p.m_p = nullptr; REFDBG(p.m_preferer = nullptr); }
52
53
54 constexpr lparam(const lparam & lparam)
55 {
56
57 m_lparam = lparam.m_lparam;
58
59 }
60
61
62 operator iptr &()
63 {
64
65 return m_lparam;
66
67 }
68
69 constexpr operator iptr () const
70 {
71
72 return m_lparam;
73
74 }
75
76 operator void * &()
77 {
78
79 return (void * &) m_lparam;
80
81 }
82
83 operator void * () const
84 {
85
86 return (void *) m_lparam;
87
88 }
89
90
91 template < typename T >
92 constexpr T raw_cast() const
93 {
94
95 return (T) m_lparam;
96
97 }
98
99
100 constexpr lparam& operator = (const lparam & lparam)
101 {
102
103 m_lparam = lparam.m_lparam;
104
105 return *this;
106
107 }
108
109
110 constexpr lparam& operator = (iptr lparam)
111 {
112
113 m_lparam = lparam;
114
115 return *this;
116
117 }
118
119
120 constexpr ::i16 x() const
121 {
122
123 return ::iptr_int_x(m_lparam);
124
125 }
126
127
128 constexpr ::i16 y() const
129 {
130
131 return ::iptr_int_y(m_lparam);
132
133 }
134
135 constexpr ::i16 hiword() const { return __hiword(m_lparam); }
136 constexpr ::i16 loword() const { return __loword(m_lparam); }
137
138 constexpr ::i32_point point() const;
139 constexpr ::i32_size size() const;
140
141};
142
143
144//template < class T >
145// inline bool operator ==(lparam l, const pointer < T > & pointer) { return ((::subparticle *) l.m_lparam) == pointer.m_psubparticle; }
146//
147//
148//template < class T >
149// inline bool operator !=(lparam l, const pointer < T > & pointer) { return ((::subparticle *) l.m_lparam) != pointer.m_psubparticle; }
150//
151
152
Definition lparam.h:9
lparam(const pointer< T > &p)
posting/sending subparticle
Definition lparam.h:44
lparam(void *p)
catching/receiving subparticle
Definition lparam.h:29
Definition subparticle.h:78
Definition wparam.h:10