| 305 | } |
| 306 | |
| 307 | @SuppressWarnings("unchecked") |
| 308 | protected final <R> Future<R> continuation(final Continuation<T, R> c) { |
| 309 | while (true) { |
| 310 | final Object curr = state; |
| 311 | if (curr == null) { |
| 312 | if (cas(curr, c)) |
| 313 | return c; |
| 314 | } else if (curr instanceof WaitQueue) { |
| 315 | if (cas(curr, ((WaitQueue<T>) curr).add(c))) |
| 316 | return c; |
| 317 | } else if (curr instanceof SatisfiedFuture) { |
| 318 | c.flush((SatisfiedFuture<T>) curr); |
| 319 | return c; |
| 320 | } else if (curr instanceof Promise && !(curr instanceof Continuation)) |
| 321 | return ((Promise<T>) curr).continuation(c); |
| 322 | else if (curr instanceof LinkedContinuation) |
| 323 | return ((LinkedContinuation<?, T>) curr).continuation(c); |
| 324 | } |
| 325 | } |
| 326 | |
| 327 | @SuppressWarnings("unchecked") |
| 328 | private final Promise<T> compress() { |