package php.runtime.ext.core.classes; import php.runtime.Memory; import php.runtime.env.Environment; import php.runtime.lang.BaseObject; import php.runtime.reflection.ClassEntity; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static php.runtime.annotation.Reflection.*; @Name("php\\concurrent\\Future") public class WrapFuture extends BaseObject { protected Future<Memory> future; public WrapFuture(Environment env, Future<Memory> future) { super(env); this.future = future; } public WrapFuture(Environment env, ClassEntity clazz) { super(env, clazz); } @Signature private Memory __construct(Environment env, Memory... args) { return Memory.NULL; } @Signature public Memory isCancelled(Environment env, Memory... args){ return future.isCancelled() ? Memory.TRUE : Memory.FALSE; } @Signature public Memory isDone(Environment env, Memory... args){ return future.isDone() ? Memory.TRUE : Memory.FALSE; } @Signature(@Arg("mayInterruptIfRunning")) public Memory cancel(Environment env, Memory... args){ return future.cancel(args[0].toBoolean()) ? Memory.TRUE : Memory.FALSE; } @Signature(@Arg(value = "timeout", optional = @Optional("NULL"))) public Memory get(Environment env, Memory... args) throws ExecutionException, InterruptedException, TimeoutException { if (args[0].isNull()) return future.get(); else return future.get(args[0].toLong(), TimeUnit.MILLISECONDS); } }