@@ -7,52 +7,35 @@ namespace Karm::Async {
7
7
/* --- Sink --- */
8
8
9
9
void Loop::_post (Sink &sink, Box<Event> event) {
10
- _queued.emplaceBack (sink, std::move (event));
10
+ _queued.emplaceBack (& sink, std::move (event));
11
11
}
12
12
13
- void Loop::_move (Sink &from, Sink & to) {
13
+ void Loop::_move (Sink &from, Sink * to) {
14
14
for (auto &q : _queued) {
15
15
if (q.sink == &from) {
16
- q.sink = & to;
16
+ q.sink = to;
17
17
}
18
18
}
19
19
20
20
for (auto &s : _sources) {
21
21
if (s.sink == &from) {
22
- s.sink = & to;
22
+ s.sink = to;
23
23
}
24
24
}
25
25
}
26
26
27
- void Loop::_dtor (Sink &sink) {
28
- for (auto &q : _queued) {
29
- if (q.sink == &sink)
30
- q.sink = nullptr ;
31
- }
32
-
33
- for (auto &s : _sources) {
34
- if (s.sink == &sink)
35
- s.sink = nullptr ;
36
- }
37
- }
38
-
39
27
/* --- Source --- */
40
28
41
29
void Loop::_bind (Source &source, Sink &sink) {
42
- _sources.emplaceBack (source, sink);
43
- }
44
-
45
- void Loop::_move (Source &from, Source &to) {
46
- for (auto &s : _sources) {
47
- if (s.source == &from)
48
- s.source = &to;
49
- }
30
+ sink._attachedOnce = true ;
31
+ _sources.emplaceBack (&source, &sink);
50
32
}
51
33
52
- void Loop::_dtor (Source *source ) {
34
+ void Loop::_move (Source &from, Source *to ) {
53
35
for (auto &s : _sources) {
54
- if (s.source == source)
55
- s.source = nullptr ;
36
+ if (s.source == &from) {
37
+ s.source = to;
38
+ }
56
39
}
57
40
}
58
41
0 commit comments