FlowableCreate$LatestAsyncEmitter.smali
.class final Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;
.super Lio/reactivex/internal/operators/flowable/FlowableCreate$BaseEmitter;
.source "FlowableCreate.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lio/reactivex/internal/operators/flowable/FlowableCreate;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x18
name = "LatestAsyncEmitter"
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">",
"Lio/reactivex/internal/operators/flowable/FlowableCreate$BaseEmitter<",
"TT;>;"
}
.end annotation
# static fields
.field private static final serialVersionUID:J = 0x37d61f4a35bdda6fL
# instance fields
.field volatile done:Z
.field error:Ljava/lang/Throwable;
.field final queue:Ljava/util/concurrent/atomic/AtomicReference;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/atomic/AtomicReference<",
"TT;>;"
}
.end annotation
.end field
.field final wip:Ljava/util/concurrent/atomic/AtomicInteger;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method constructor <init>(Lorg/reactivestreams/Subscriber;)V
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/reactivestreams/Subscriber<",
"-TT;>;)V"
}
.end annotation
.line 593
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
.local p1, "actual":Lorg/reactivestreams/Subscriber;, "Lorg/reactivestreams/Subscriber<-TT;>;"
invoke-direct {p0, p1}, Lio/reactivex/internal/operators/flowable/FlowableCreate$BaseEmitter;-><init>(Lorg/reactivestreams/Subscriber;)V
.line 594
new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
iput-object v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->queue:Ljava/util/concurrent/atomic/AtomicReference;
.line 595
new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>()V
iput-object v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
.line 596
return-void
.end method
# virtual methods
.method drain()V
.registers 14
.line 645
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
iget-object v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I
move-result v0
if-eqz v0, :cond_9
.line 646
return-void
.line 649
:cond_9
const/4 v0, 0x1
.line 650
.local v0, "missed":I
iget-object v1, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->actual:Lorg/reactivestreams/Subscriber;
.line 651
.local v1, "a":Lorg/reactivestreams/Subscriber;, "Lorg/reactivestreams/Subscriber<-TT;>;"
iget-object v2, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->queue:Ljava/util/concurrent/atomic/AtomicReference;
.line 654
.local v2, "q":Ljava/util/concurrent/atomic/AtomicReference;, "Ljava/util/concurrent/atomic/AtomicReference<TT;>;"
:goto_e
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->get()J
move-result-wide v3
.line 655
.local v3, "r":J
const-wide/16 v5, 0x0
.line 657
.local v5, "e":J
:goto_14
const/4 v7, 0x1
const/4 v8, 0x0
const/4 v9, 0x0
cmp-long v10, v5, v3
if-eqz v10, :cond_4a
.line 658
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->isCancelled()Z
move-result v10
if-eqz v10, :cond_25
.line 659
invoke-virtual {v2, v9}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
.line 660
return-void
.line 663
:cond_25
iget-boolean v10, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->done:Z
.line 665
.local v10, "d":Z
invoke-virtual {v2, v9}, Ljava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v11
.line 667
.local v11, "o":Ljava/lang/Object;, "TT;"
if-nez v11, :cond_2f
const/4 v12, 0x1
goto :goto_30
:cond_2f
const/4 v12, 0x0
.line 669
.local v12, "empty":Z
:goto_30
if-eqz v10, :cond_40
if-eqz v12, :cond_40
.line 670
iget-object v7, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->error:Ljava/lang/Throwable;
.line 671
.local v7, "ex":Ljava/lang/Throwable;
if-eqz v7, :cond_3c
.line 672
invoke-virtual {p0, v7}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->error(Ljava/lang/Throwable;)Z
goto :goto_3f
.line 674
:cond_3c
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->complete()V
.line 676
:goto_3f
return-void
.line 679
.end local v7 # "ex":Ljava/lang/Throwable;
:cond_40
if-eqz v12, :cond_43
.line 680
goto :goto_4a
.line 683
:cond_43
invoke-interface {v1, v11}, Lorg/reactivestreams/Subscriber;->onNext(Ljava/lang/Object;)V
.line 685
const-wide/16 v7, 0x1
add-long/2addr v5, v7
.line 686
.end local v10 # "d":Z
.end local v11 # "o":Ljava/lang/Object;, "TT;"
.end local v12 # "empty":Z
goto :goto_14
.line 688
:cond_4a
:goto_4a
cmp-long v10, v5, v3
if-nez v10, :cond_72
.line 689
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->isCancelled()Z
move-result v10
if-eqz v10, :cond_58
.line 690
invoke-virtual {v2, v9}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
.line 691
return-void
.line 694
:cond_58
iget-boolean v9, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->done:Z
.line 696
.local v9, "d":Z
invoke-virtual {v2}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
move-result-object v10
if-nez v10, :cond_61
goto :goto_62
:cond_61
const/4 v7, 0x0
.line 698
.local v7, "empty":Z
:goto_62
if-eqz v9, :cond_72
if-eqz v7, :cond_72
.line 699
iget-object v8, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->error:Ljava/lang/Throwable;
.line 700
.local v8, "ex":Ljava/lang/Throwable;
if-eqz v8, :cond_6e
.line 701
invoke-virtual {p0, v8}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->error(Ljava/lang/Throwable;)Z
goto :goto_71
.line 703
:cond_6e
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->complete()V
.line 705
:goto_71
return-void
.line 709
.end local v7 # "empty":Z
.end local v8 # "ex":Ljava/lang/Throwable;
.end local v9 # "d":Z
:cond_72
const-wide/16 v7, 0x0
cmp-long v9, v5, v7
if-eqz v9, :cond_7b
.line 710
invoke-static {p0, v5, v6}, Lio/reactivex/internal/util/BackpressureHelper;->produced(Ljava/util/concurrent/atomic/AtomicLong;J)J
.line 713
:cond_7b
iget-object v7, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
neg-int v8, v0
invoke-virtual {v7, v8}, Ljava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I
move-result v0
.line 714
if-nez v0, :cond_86
.line 715
nop
.line 718
.end local v3 # "r":J
.end local v5 # "e":J
return-void
.line 717
:cond_86
goto :goto_e
.end method
.method public onComplete()V
.registers 2
.line 628
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
const/4 v0, 0x1
iput-boolean v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->done:Z
.line 629
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->drain()V
.line 630
return-void
.end method
.method public onNext(Ljava/lang/Object;)V
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(TT;)V"
}
.end annotation
.line 600
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
.local p1, "t":Ljava/lang/Object;, "TT;"
iget-boolean v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->done:Z
if-nez v0, :cond_21
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->isCancelled()Z
move-result v0
if-eqz v0, :cond_b
goto :goto_21
.line 604
:cond_b
if-nez p1, :cond_18
.line 605
new-instance v0, Ljava/lang/NullPointerException;
const-string v1, "onNext called with null. Null values are generally not allowed in 2.x operators and sources."
invoke-direct {v0, v1}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
invoke-virtual {p0, v0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->onError(Ljava/lang/Throwable;)V
.line 606
return-void
.line 608
:cond_18
iget-object v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->queue:Ljava/util/concurrent/atomic/AtomicReference;
invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicReference;->set(Ljava/lang/Object;)V
.line 609
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->drain()V
.line 610
return-void
.line 601
:cond_21
:goto_21
return-void
.end method
.method onRequested()V
.registers 1
.line 634
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->drain()V
.line 635
return-void
.end method
.method onUnsubscribed()V
.registers 3
.line 639
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
iget-object v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I
move-result v0
if-nez v0, :cond_e
.line 640
iget-object v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->queue:Ljava/util/concurrent/atomic/AtomicReference;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
.line 642
:cond_e
return-void
.end method
.method public tryOnError(Ljava/lang/Throwable;)Z
.registers 4
.param p1, "e" # Ljava/lang/Throwable;
.line 614
.local p0, "this":Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;, "Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter<TT;>;"
iget-boolean v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->done:Z
if-nez v0, :cond_20
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->isCancelled()Z
move-result v0
if-eqz v0, :cond_b
goto :goto_20
.line 617
:cond_b
if-nez p1, :cond_17
.line 618
new-instance v0, Ljava/lang/NullPointerException;
const-string v1, "onError called with null. Null values are generally not allowed in 2.x operators and sources."
invoke-direct {v0, v1}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
invoke-virtual {p0, v0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->onError(Ljava/lang/Throwable;)V
.line 620
:cond_17
iput-object p1, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->error:Ljava/lang/Throwable;
.line 621
const/4 v0, 0x1
iput-boolean v0, p0, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->done:Z
.line 622
invoke-virtual {p0}, Lio/reactivex/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->drain()V
.line 623
return v0
.line 615
:cond_20
:goto_20
const/4 v0, 0x0
return v0
.end method