File tree Expand file tree Collapse file tree 4 files changed +59
-37
lines changed
src/main/java/dev/mv/utilsx Expand file tree Collapse file tree 4 files changed +59
-37
lines changed Original file line number Diff line number Diff line change 1+ package dev .mv .utilsx .async ;
2+
3+ public class MVSync {
4+
5+ //blanket class, implement async runtime in here
6+
7+ }
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 11package dev .mv .utilsx .futures ;
22
3- import dev .mv .utilsx .async . Signal ;
3+ import dev .mv .utilsx .generic . Null ;
44import org .jetbrains .annotations .NotNull ;
55
6+ import java .time .Duration ;
7+
68public interface Future <T > {
79
810 @ NotNull
@@ -18,4 +20,24 @@ default T awaitSync() {
1820 signal .await ();
1921 }
2022 }
23+
24+ static Future <Null > yield () {
25+ return new Yield ();
26+ }
27+
28+ static Future <Null > sleep (Duration duration ) {
29+ return new Sleep (duration );
30+ }
31+
32+ static Future <Null > sleep (long millis ) {
33+ return new Sleep (millis );
34+ }
35+
36+ static <T > Future <T > pending () {
37+ return new Pending <>();
38+ }
39+
40+ static <T > Future <T > ready (T value ) {
41+ return new Ready <>(value );
42+ }
2143}
Original file line number Diff line number Diff line change 1- package dev .mv .utilsx .async ;
1+ package dev .mv .utilsx .futures ;
22
3- import dev .mv .utilsx .futures .*;
43import dev .mv .utilsx .generic .Null ;
54
65import java .time .Duration ;
109
1110public class Signal implements Wake {
1211
13- final Mutex <Boolean > ready = new Mutex <>(false );
14- final CondVar condition = new CondVar (ready );
15- final List <Waker > wakers = new ArrayList <>(1 );
16- final AtomicInteger waiting = new AtomicInteger (0 );
12+ private final Mutex <Boolean > ready = new Mutex <>(false );
13+ private final CondVar condition = new CondVar (ready );
14+ private final List <Waker > wakers = new ArrayList <>(1 );
15+ private final AtomicInteger waiting = new AtomicInteger (0 );
1716
1817 public boolean ready () {
1918 return ready .get ();
@@ -62,4 +61,28 @@ public void wake() {
6261 condition .signalAll ();
6362 ready .unlock ();
6463 }
64+
65+ public static class SignalFuture implements Future <Null > {
66+
67+ private final Signal signal ;
68+ private boolean started = false ;
69+
70+ private SignalFuture (Signal signal ) {
71+ this .signal = signal ;
72+ }
73+
74+ @ Override
75+ public Poll <Null > poll (Context context ) {
76+ try {
77+ signal .ready .lock ();
78+ if (signal .ready .getLocked ()) return new Poll <>(Null .INSTANCE );
79+ if (!started ) {
80+ signal .wakers .add (context .waker ());
81+ }
82+ return new Poll <>();
83+ } finally {
84+ signal .ready .unlock ();
85+ }
86+ }
87+ }
6588}
You can’t perform that action at this time.
0 commit comments