1
- use crate :: connections:: SignalArgArrayToTuple ;
2
1
use std:: future:: Future ;
3
2
use std:: os:: raw:: c_void;
4
3
use std:: pin:: Pin ;
4
+ use std:: task:: { Context , Poll , RawWaker , RawWakerVTable , Waker } ;
5
+
6
+ use crate :: connections:: SignalArgArrayToTuple ;
5
7
6
- static QT_WAKER_VTABLE : std:: task:: RawWakerVTable = unsafe {
7
- std:: task:: RawWakerVTable :: new (
8
- |s : * const ( ) | {
9
- std:: task:: RawWaker :: new (
10
- cpp ! ( [ s as "Waker*" ] -> * const ( ) as "Waker*" {
11
- s->refs++;
12
- return s;
13
- } ) ,
14
- & QT_WAKER_VTABLE ,
15
- )
16
- } ,
17
- |s : * const ( ) | {
18
- cpp ! ( [ s as "Waker*" ] {
19
- s->wake( ) ;
20
- s->deref( ) ;
21
- } )
22
- } ,
23
- |s : * const ( ) | {
24
- cpp ! ( [ s as "Waker*" ] {
25
- s->wake( ) ;
26
- } )
27
- } ,
28
- |s : * const ( ) | {
29
- cpp ! ( [ s as "Waker*" ] {
30
- s->deref( ) ;
31
- } )
32
- } ,
33
- )
34
- } ;
8
+ static QT_WAKER_VTABLE : RawWakerVTable = RawWakerVTable :: new (
9
+ |s : * const ( ) | {
10
+ RawWaker :: new (
11
+ cpp ! ( unsafe [ s as "Waker *" ] -> * const ( ) as "Waker *" {
12
+ s->refs++;
13
+ return s;
14
+ } ) ,
15
+ & QT_WAKER_VTABLE ,
16
+ )
17
+ } ,
18
+ |s : * const ( ) | {
19
+ cpp ! ( unsafe [ s as "Waker *" ] {
20
+ s->wake( ) ;
21
+ s->deref( ) ;
22
+ } )
23
+ } ,
24
+ |s : * const ( ) | {
25
+ cpp ! ( unsafe [ s as "Waker *" ] {
26
+ s->wake( ) ;
27
+ } )
28
+ } ,
29
+ |s : * const ( ) | {
30
+ cpp ! ( unsafe [ s as "Waker *" ] {
31
+ s->deref( ) ;
32
+ } )
33
+ } ,
34
+ ) ;
35
35
36
36
cpp ! { {
37
37
@@ -61,8 +61,8 @@ cpp! {{
61
61
return ;
62
62
}
63
63
completed = rust!( ProcessQtEvent [
64
- this: * const ( ) as "Waker*" ,
65
- future: * mut dyn Future <Output = ( ) > as "TraitObject"
64
+ this: * const ( ) as "Waker *" ,
65
+ future: * mut dyn Future <Output = ( ) > as "TraitObject"
66
66
] -> bool as "bool" {
67
67
poll_with_qt_waker( this, Pin :: new_unchecked( & mut * future) )
68
68
} ) ;
@@ -89,7 +89,7 @@ cpp! {{
89
89
}
90
90
91
91
~Waker ( ) {
92
- rust!( QtDestroyFuture [ future: * mut dyn Future <Output = ( ) > as "TraitObject" ] {
92
+ rust!( QtDestroyFuture [ future: * mut dyn Future <Output = ( ) > as "TraitObject" ] {
93
93
std:: mem:: drop( Box :: from_raw( future) )
94
94
} ) ;
95
95
}
@@ -107,7 +107,7 @@ cpp! {{
107
107
pub fn execute_async ( f : impl Future < Output = ( ) > + ' static ) {
108
108
let f: * mut dyn Future < Output = ( ) > = Box :: into_raw ( Box :: new ( f) ) ;
109
109
unsafe {
110
- let waker = cpp ! ( [ f as "TraitObject" ] -> * const ( ) as "Waker*" {
110
+ let waker = cpp ! ( [ f as "TraitObject" ] -> * const ( ) as "Waker *" {
111
111
return new Waker ( f) ;
112
112
} ) ;
113
113
poll_with_qt_waker ( waker, Pin :: new_unchecked ( & mut * f) ) ;
@@ -116,10 +116,10 @@ pub fn execute_async(f: impl Future<Output = ()> + 'static) {
116
116
117
117
// SAFETY: caller must ensure that given future hasn't returned Poll::Ready earlier.
118
118
unsafe fn poll_with_qt_waker ( waker : * const ( ) , future : Pin < & mut dyn Future < Output = ( ) > > ) -> bool {
119
- cpp ! ( [ waker as "Waker*" ] { waker->refs++; } ) ;
120
- let waker = std :: task :: RawWaker :: new ( waker, & QT_WAKER_VTABLE ) ;
121
- let waker = std :: task :: Waker :: from_raw ( waker) ;
122
- let mut context = std :: task :: Context :: from_waker ( & waker) ;
119
+ cpp ! ( [ waker as "Waker *" ] { waker->refs++; } ) ;
120
+ let waker = RawWaker :: new ( waker, & QT_WAKER_VTABLE ) ;
121
+ let waker = Waker :: from_raw ( waker) ;
122
+ let mut context = Context :: from_waker ( & waker) ;
123
123
future. poll ( & mut context) . is_ready ( )
124
124
}
125
125
@@ -139,7 +139,7 @@ pub unsafe fn wait_on_signal<Args: SignalArgArrayToTuple>(
139
139
) -> impl Future < Output = <Args as SignalArgArrayToTuple >:: Tuple > {
140
140
enum ConnectionFutureState < Args : SignalArgArrayToTuple > {
141
141
Init { sender : * const c_void , signal : crate :: connections:: Signal < Args > } ,
142
- Started { handle : crate :: connections:: ConnectionHandle , waker : std :: task :: Waker } ,
142
+ Started { handle : crate :: connections:: ConnectionHandle , waker : Waker } ,
143
143
Finished { result : <Args as SignalArgArrayToTuple >:: Tuple } ,
144
144
Invalid ,
145
145
}
@@ -158,14 +158,11 @@ pub unsafe fn wait_on_signal<Args: SignalArgArrayToTuple>(
158
158
159
159
impl < Args : SignalArgArrayToTuple > Future for ConnectionFuture < Args > {
160
160
type Output = <Args as SignalArgArrayToTuple >:: Tuple ;
161
- fn poll (
162
- mut self : Pin < & mut Self > ,
163
- ctx : & mut std:: task:: Context ,
164
- ) -> std:: task:: Poll < Self :: Output > {
161
+ fn poll ( mut self : Pin < & mut Self > , ctx : & mut Context ) -> Poll < Self :: Output > {
165
162
let state = & mut self . 0 ;
166
163
* state = match std:: mem:: replace ( state, ConnectionFutureState :: Invalid ) {
167
164
ConnectionFutureState :: Finished { result } => {
168
- return std :: task :: Poll :: Ready ( result) ;
165
+ return Poll :: Ready ( result) ;
169
166
}
170
167
ConnectionFutureState :: Init { sender, signal } => {
171
168
let s_ptr = state as * mut ConnectionFutureState < _ > ;
@@ -176,7 +173,7 @@ pub unsafe fn wait_on_signal<Args: SignalArgArrayToTuple>(
176
173
s @ ConnectionFutureState :: Started { .. } => s,
177
174
ConnectionFutureState :: Invalid => unreachable ! ( ) ,
178
175
} ;
179
- std :: task :: Poll :: Pending
176
+ Poll :: Pending
180
177
}
181
178
}
182
179
0 commit comments