// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.sdk.util; import java.util.concurrent.atomic.AtomicReference; import org.chromium.sdk.RelayOk; import org.chromium.sdk.SyncCallback; import org.chromium.sdk.util.AsyncFuture; import org.chromium.sdk.util.AsyncFuture.Operation; /** * A wrapper around {@link AtomicReference} and {@link AsyncFuture} that makes the source code * cleaner and shorter. */ public class AsyncFutureRef<T> { private final AtomicReference<AsyncFuture<T>> ref = new AtomicReference<AsyncFuture<T>>(null); public void initializeRunning(Operation<T> requester) { AsyncFuture.initializeReference(ref, requester); } public void reinitializeRunning(Operation<T> requester) { AsyncFuture.reinitializeReference(ref, requester); } public void initializeTrivial(T value) { AsyncFuture.initializeTrivial(ref, value); } public boolean isInitialized() { return ref.get() != null; } public T getSync() throws MethodIsBlockingException { return ref.get().getSync(); } public RelayOk getAsync(AsyncFuture.Callback<T> callback, SyncCallback syncCallback) { return ref.get().getAsync(callback, syncCallback); } public boolean isDone() { return ref.get().isDone(); } }