io.qt.core.QFuture Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of qtjambi Show documentation
Show all versions of qtjambi Show documentation
QtJambi base module containing QtCore, QtGui and QtWidgets.
/****************************************************************************
**
** Copyright (C) 2009-2024 Dr. Peter Droste, Omix Visualization GmbH & Co. KG. All rights reserved.
**
** This file is part of Qt Jambi.
**
** $BEGIN_LICENSE$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
** $END_LICENSE$
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
package io.qt.core;
import io.qt.NativeAccess;
import io.qt.NonNull;
import io.qt.QNoImplementationException;
import io.qt.StrictNonNull;
/**
* Represents the result of an asynchronous computation
* Java wrapper for Qt class QFuture
*/
public final class QFuture
implements java.lang.Iterable,
java.lang.Cloneable
{
static {
QtJambi_LibraryUtilities.initialize();
}
private final io.qt.core.QFutureInterfaceBase d;
/**
*
*/
public QFuture(){
d = QFutureInterface.canceledResult();
}
/**
* See QFuture::QFuture(QFutureInterface<T>*)
*/
public QFuture(io.qt.core.@StrictNonNull QFutureInterface d){
super();
this.d = d.clone();
}
@NativeAccess
QFuture(io.qt.core.QFutureInterfaceBase d, boolean internal){
super();
java.util.Objects.requireNonNull(d, "Argument 'd': null not expected.");
this.d = d;
}
/**
*
*/
@io.qt.QtUninvokable
public final void cancel(){
d.cancel();
}
/**
* See QFuture::isCanceled()const
*/
@io.qt.QtUninvokable
public final boolean isCanceled(){
return d.isCanceled();
}
/**
* See QFuture::isFinished()const
*/
@io.qt.QtUninvokable
public final boolean isFinished(){
return d.isFinished();
}
/**
*
* @deprecated Use isSuspending() or isSuspended() instead.
*/
@Deprecated
@io.qt.QtUninvokable
public final boolean isPaused(){
return d.isPaused();
}
/**
* See QFuture::isSuspended()const
*/
@io.qt.QtUninvokable
public final boolean isSuspended(){
return d.isSuspended();
}
/**
* See QFuture::isSuspending()const
*/
@io.qt.QtUninvokable
public final boolean isSuspending(){
return d.isSuspending();
}
/**
* See QFuture::isResultReadyAt(int)const
*/
@io.qt.QtUninvokable
public final boolean isResultReadyAt(int resultIndex){
return d.isResultReadyAt(resultIndex);
}
/**
*
*/
@io.qt.QtUninvokable
public final boolean isRunning(){
return d.isRunning();
}
/**
*
*/
@io.qt.QtUninvokable
public final boolean isStarted(){
return d.isStarted();
}
/**
* See QFuture::pause()
* @deprecated Use suspend() instead.
*/
@Deprecated
@io.qt.QtUninvokable
public final void pause(){
setPaused(true);
}
/**
*
*/
@io.qt.QtUninvokable
public final void suspend(){
setSuspended(true);
}
/**
* See QFuture::progressMaximum()const
*/
@io.qt.QtUninvokable
public final int progressMaximum(){
return d.progressMaximum();
}
/**
* See QFuture::progressMinimum()const
*/
@io.qt.QtUninvokable
public final int progressMinimum(){
return d.progressMinimum();
}
/**
* See QFuture::progressText()const
*/
@io.qt.QtUninvokable
public final java.lang.String progressText(){
return d.progressText();
}
/**
* See QFuture::progressValue()const
*/
@io.qt.QtUninvokable
public final int progressValue(){
return d.progressValue();
}
/**
*
*/
@io.qt.QtUninvokable
public final T result(){
if(d instanceof QFutureInterface) {
d.waitForResult(0);
try{
return QFutureInterface.result(QtJambi_LibraryUtilities.internal.nativeId(d), 0);
}catch(QNoImplementationException e) {
throw new QNoImplementationException("result() not available for QFuture.");
}
}else {
throw new QNoImplementationException("result() not available for QFuture.");
}
}
/**
* See QFuture::resultAt(int)const
*/
@io.qt.QtUninvokable
public final T resultAt(int index){
if(d instanceof QFutureInterface) {
d.waitForResult(index);
try{
return QFutureInterface.result(QtJambi_LibraryUtilities.internal.nativeId(d), index);
}catch(QNoImplementationException e) {
throw new QNoImplementationException("resultAt(int) not available for QFuture.");
}
}else {
throw new QNoImplementationException("resultAt(int) not available for QFuture.");
}
}
/**
* See QFuture::resultCount()const
*/
@io.qt.QtUninvokable
public final int resultCount(){
return d.resultCount();
}
/**
*
*/
@io.qt.QtUninvokable
public final io.qt.core.QList results(){
if(d instanceof QFutureInterface) {
try{
return QFutureInterface.results(QtJambi_LibraryUtilities.internal.nativeId(d));
}catch(QNoImplementationException e) {
throw new QNoImplementationException("results() not available for QFuture.");
}
}else {
throw new QNoImplementationException("results() not available for QFuture.");
}
}
/**
*
*/
@io.qt.QtUninvokable
public final void resume(){
setSuspended(false);
}
/**
*
* @deprecated Use setSuspended() instead.
*/
@Deprecated
@io.qt.QtUninvokable
public final void setPaused(boolean paused){
d.setPaused(paused);
}
/**
* See QFuture::setSuspended(bool)
*/
@io.qt.QtUninvokable
public final void setSuspended(boolean suspended){
d.setSuspended(suspended);
}
/**
*
* @deprecated Use toggleSuspended() instead.
*/
@Deprecated
@io.qt.QtUninvokable
public final void togglePaused(){
d.togglePaused();
}
/**
* See QFuture::toggleSuspended()
*/
@io.qt.QtUninvokable
public final void toggleSuspended(){
d.toggleSuspended();
}
/**
* See QFuture::waitForFinished()
*/
@io.qt.QtUninvokable
public final void waitForFinished(){
d.waitForFinished();
}
@Override
public java.util.@NonNull Iterator iterator() {
if(d instanceof QFutureInterface) {
if(d.isFinished())
return results().iterator();
return new java.util.Iterator(){
int i=0;
@Override
public boolean hasNext() {
d.waitForResult(i);
return d.isResultReadyAt(i);
}
@Override
public T next() {
return QFutureInterface.result(QtJambi_LibraryUtilities.internal.nativeId(d), i++);
}
};
}else {
throw new QNoImplementationException("iterator() not available for QFutureInterfaceBase.");
}
}
@Override
@io.qt.QtUninvokable
public boolean equals(Object other) {
if (other instanceof io.qt.core.QFuture>) {
return d.equals(((io.qt.core.QFuture>) other).d);
}
return false;
}
@io.qt.QtUninvokable
@Override
public int hashCode() {
return d.hashCode();
}
@Override
public @NonNull QFuture clone() {
return new QFuture(d.clone(), true);
}
@io.qt.QtUninvokable
public @NonNull QFuture then(java.util.function.Function, R> function){
return then(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
@io.qt.QtUninvokable
private native static QFuture then(long __this_nativeId, java.util.function.Function, R> function);
@io.qt.QtUninvokable
public @NonNull QFuture then(QtFuture.Launch policy, java.util.function.Function, R> function){
return thenLaunch(QtJambi_LibraryUtilities.internal.nativeId(d), policy.value(), function);
}
@io.qt.QtUninvokable
private native static QFuture thenLaunch(long __this_nativeId, int policy, java.util.function.Function, R> function);
@io.qt.QtUninvokable
public @NonNull QFuture then(QThreadPool pool, java.util.function.Function, R> function){
return thenPool(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.nativeId(pool), function);
}
@io.qt.QtUninvokable
private native static QFuture thenPool(long __this_nativeId, long pool, java.util.function.Function, R> function);
@io.qt.QtUninvokable
public @NonNull QFuture then(java.util.function.Consumer> function){
return thenVoid(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
@io.qt.QtUninvokable
private native static QFuture thenVoid(long __this_nativeId, java.util.function.Consumer> function);
@io.qt.QtUninvokable
public @NonNull QFuture then(QtFuture.Launch policy, java.util.function.Consumer> function){
return thenLaunchVoid(QtJambi_LibraryUtilities.internal.nativeId(d), policy.value(), function);
}
@io.qt.QtUninvokable
private native static QFuture thenLaunchVoid(long __this_nativeId, int policy, java.util.function.Consumer> function);
@io.qt.QtUninvokable
public @NonNull QFuture then(QThreadPool pool, java.util.function.Consumer> function){
return thenPoolVoid(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.nativeId(pool), function);
}
@io.qt.QtUninvokable
private native static QFuture thenPoolVoid(long __this_nativeId, long pool, java.util.function.Consumer> function);
@io.qt.QtUninvokable
public @NonNull QFuture onFailed(java.util.function.Function function){
return onFailed(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
@io.qt.QtUninvokable
public @NonNull QFuture onCanceled(java.util.function.Supplier function){
return onCanceled(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
@io.qt.QtUninvokable
public @NonNull QFuture onFailed(java.util.function.Consumer function){
return onFailed(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
@io.qt.QtUninvokable
private native static QFuture onFailed(long __this_nativeId, Object function);
@io.qt.QtUninvokable
public @NonNull QFuture onCanceled(java.lang.Runnable function){
return onCanceled(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
@io.qt.QtUninvokable
private native static QFuture onCanceled(long __this_nativeId, java.lang.Object function);
@io.qt.QtUninvokable
public @NonNull QFuture then(QObject context, java.util.function.Function, R> function){
return thenPool(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(context)), function);
}
@io.qt.QtUninvokable
private native static QFuture thenContext(long __this_nativeId, long contextId, java.util.function.Function, R> function);
@io.qt.QtUninvokable
public @NonNull QFuture then(QObject context, java.util.function.Consumer> function){
return thenPoolVoid(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(context)), function);
}
@io.qt.QtUninvokable
private native static QFuture thenContextVoid(long __this_nativeId, long contextId, java.util.function.Consumer> function);
@io.qt.QtUninvokable
public @NonNull QFuture onFailed(QObject context, java.util.function.Function function){
return onFailedContext(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(context)), function);
}
@io.qt.QtUninvokable
private native static QFuture onFailedContext(long __this_nativeId, long contextId, Object function);
@io.qt.QtUninvokable
public @NonNull QFuture onCanceled(QObject context, java.util.function.Supplier function){
return onCanceledContext(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(context)), function);
}
@io.qt.QtUninvokable
public @NonNull QFuture onFailed(QObject context, java.util.function.Consumer function){
return onFailedContext(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(context)), function);
}
@io.qt.QtUninvokable
public @NonNull QFuture onCanceled(QObject context, java.lang.Runnable function){
return onCanceledContext(QtJambi_LibraryUtilities.internal.nativeId(d), QtJambi_LibraryUtilities.internal.checkedNativeId(java.util.Objects.requireNonNull(context)), function);
}
@io.qt.QtUninvokable
private native static QFuture onCanceledContext(long __this_nativeId, long contextId, java.lang.Object function);
public @NonNull QFuture unwrap(@StrictNonNull Class flatType){
QFutureInterface promise = new QFutureInterface<>(QFutureInterfaceBase.State.Pending);
this.then(nested->{
promise.reportStarted();
try {
for(T result : nested.results()) {
if(result instanceof QFuture) {
QFuture future = ((QFuture>) result).unwrap(flatType);
promise.reportResults(future.results());
}else if(result==null || flatType.isInstance(result)){
promise.reportResult(flatType.cast(result));
}
}
}catch(Throwable e) {
promise.reportException(e);
}
promise.reportFinished();
}).onCanceled(() -> {
promise.reportCanceled();
promise.reportFinished();
});
return promise.future();
}
}