io.qt.core.QFuture Maven / Gradle / Ivy
Show all versions of qtjambi Show documentation
/****************************************************************************
**
** 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(forRemoval=true, since="Qt 6.0")
@io.qt.QtUninvokable
public final boolean isPaused(){
return d.isSuspended() || d.isSuspending();
}
/**
* 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(forRemoval=true, since="Qt 6.0")
@io.qt.QtUninvokable
public final void pause(){
setSuspended(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.@NonNull 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(forRemoval=true, since="Qt 6.0")
@io.qt.QtUninvokable
public final void setPaused(boolean paused){
d.setSuspended(paused);
}
/**
* See QFuture::setSuspended(bool)
*/
@io.qt.QtUninvokable
public final void setSuspended(boolean suspended){
d.setSuspended(suspended);
}
/**
*
* @deprecated Use toggleSuspended() instead.
*/
@Deprecated(forRemoval=true, since="Qt 6.0")
@io.qt.QtUninvokable
public final void togglePaused(){
d.toggleSuspended();
}
/**
* 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 equals((io.qt.core.QFuture>) other);
}
return false;
}
@io.qt.QtUninvokable
public boolean equals(io.qt.core.@StrictNonNull QFuture> other) {
return d.equals(other.d);
}
@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);
/**
* See QFuture::then(QtFuture::Launch, 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);
/**
* See QFuture::then(QThreadPool*, 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);
/**
* See QFuture::then(QtFuture::Launch, 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);
/**
* See QFuture::then(QThreadPool*, 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);
/**
* See QFuture::onFailed(Function&&)
*/
@io.qt.QtUninvokable
public @NonNull QFuture onFailed(java.util.function.Function function){
return onFailed(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
/**
* See QFuture::onCanceled(Function&&)
*/
@io.qt.QtUninvokable
public @NonNull QFuture onCanceled(java.util.function.Supplier function){
return onCanceled(QtJambi_LibraryUtilities.internal.nativeId(d), function);
}
/**
* See QFuture::onFailed(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);
/**
* See QFuture::onCanceled(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);
/**
* See QFuture::then(QObject*, 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);
/**
* See QFuture::then(QObject*, 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);
/**
* See QFuture::onFailed(QObject*, 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);
/**
* See QFuture::onCanceled(QObject*, 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);
}
/**
* See QFuture::onFailed(QObject*, 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);
}
/**
* See QFuture::onCanceled(QObject*, 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();
}
}