OperatorZip$Zip.smali
.class final Lrx/internal/operators/OperatorZip$Zip;
.super Ljava/util/concurrent/atomic/AtomicLong;
.source "OperatorZip.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lrx/internal/operators/OperatorZip;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x18
name = "Zip"
.end annotation
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;
}
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"<R:",
"Ljava/lang/Object;",
">",
"Ljava/util/concurrent/atomic/AtomicLong;"
}
.end annotation
# static fields
.field static final THRESHOLD:I
.field private static final serialVersionUID:J = 0x53337eae55d8937dL
# instance fields
.field final child:Lrx/Observer;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lrx/Observer<",
"-TR;>;"
}
.end annotation
.end field
.field private final childSubscription:Lrx/subscriptions/CompositeSubscription;
.field emitted:I
.field private requested:Ljava/util/concurrent/atomic/AtomicLong;
.field private volatile subscribers:[Ljava/lang/Object;
.field private final zipFunction:Lrx/functions/FuncN;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lrx/functions/FuncN<",
"+TR;>;"
}
.end annotation
.end field
# direct methods
.method static constructor <clinit>()V
.registers 4
.line 1
sget v0, Lrx/internal/util/RxRingBuffer;->SIZE:I
int-to-double v0, v0
const-wide v2, 0x3fe6666666666666L # 0.7
invoke-static {v0, v1}, Ljava/lang/Double;->isNaN(D)Z
mul-double v0, v0, v2
double-to-int v0, v0
sput v0, Lrx/internal/operators/OperatorZip$Zip;->THRESHOLD:I
return-void
.end method
.method public constructor <init>(Lrx/Subscriber;Lrx/functions/FuncN;)V
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lrx/Subscriber<",
"-TR;>;",
"Lrx/functions/FuncN<",
"+TR;>;)V"
}
.end annotation
.line 1
invoke-direct {p0}, Ljava/util/concurrent/atomic/AtomicLong;-><init>()V
.line 2
new-instance v0, Lrx/subscriptions/CompositeSubscription;
invoke-direct {v0}, Lrx/subscriptions/CompositeSubscription;-><init>()V
iput-object v0, p0, Lrx/internal/operators/OperatorZip$Zip;->childSubscription:Lrx/subscriptions/CompositeSubscription;
.line 3
iput-object p1, p0, Lrx/internal/operators/OperatorZip$Zip;->child:Lrx/Observer;
.line 4
iput-object p2, p0, Lrx/internal/operators/OperatorZip$Zip;->zipFunction:Lrx/functions/FuncN;
.line 5
iget-object p2, p0, Lrx/internal/operators/OperatorZip$Zip;->childSubscription:Lrx/subscriptions/CompositeSubscription;
invoke-virtual {p1, p2}, Lrx/Subscriber;->add(Lrx/Subscription;)V
return-void
.end method
# virtual methods
.method public start([Lrx/Observable;Ljava/util/concurrent/atomic/AtomicLong;)V
.registers 8
.line 1
array-length v0, p1
new-array v0, v0, [Ljava/lang/Object;
const/4 v1, 0x0
const/4 v2, 0x0
.line 2
:goto_5
array-length v3, p1
if-ge v2, v3, :cond_17
.line 3
new-instance v3, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;
invoke-direct {v3, p0}, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;-><init>(Lrx/internal/operators/OperatorZip$Zip;)V
.line 4
aput-object v3, v0, v2
.line 5
iget-object v4, p0, Lrx/internal/operators/OperatorZip$Zip;->childSubscription:Lrx/subscriptions/CompositeSubscription;
invoke-virtual {v4, v3}, Lrx/subscriptions/CompositeSubscription;->add(Lrx/Subscription;)V
add-int/lit8 v2, v2, 0x1
goto :goto_5
.line 6
:cond_17
iput-object p2, p0, Lrx/internal/operators/OperatorZip$Zip;->requested:Ljava/util/concurrent/atomic/AtomicLong;
.line 7
iput-object v0, p0, Lrx/internal/operators/OperatorZip$Zip;->subscribers:[Ljava/lang/Object;
.line 8
:goto_1b
array-length p2, p1
if-ge v1, p2, :cond_2a
.line 9
aget-object p2, p1, v1
aget-object v2, v0, v1
check-cast v2, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;
invoke-virtual {p2, v2}, Lrx/Observable;->unsafeSubscribe(Lrx/Subscriber;)Lrx/Subscription;
add-int/lit8 v1, v1, 0x1
goto :goto_1b
:cond_2a
return-void
.end method
.method tick()V
.registers 15
.line 1
iget-object v0, p0, Lrx/internal/operators/OperatorZip$Zip;->subscribers:[Ljava/lang/Object;
if-nez v0, :cond_5
return-void
.line 2
:cond_5
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->getAndIncrement()J
move-result-wide v1
const-wide/16 v3, 0x0
cmp-long v5, v1, v3
if-nez v5, :cond_a8
.line 3
array-length v1, v0
.line 4
iget-object v2, p0, Lrx/internal/operators/OperatorZip$Zip;->child:Lrx/Observer;
.line 5
iget-object v5, p0, Lrx/internal/operators/OperatorZip$Zip;->requested:Ljava/util/concurrent/atomic/AtomicLong;
.line 6
:cond_14
:goto_14
new-array v6, v1, [Ljava/lang/Object;
const/4 v7, 0x0
const/4 v8, 0x1
const/4 v9, 0x0
const/4 v10, 0x1
:goto_1a
if-ge v9, v1, :cond_42
.line 7
aget-object v11, v0, v9
check-cast v11, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;
iget-object v11, v11, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;->items:Lrx/internal/util/RxRingBuffer;
.line 8
invoke-virtual {v11}, Lrx/internal/util/RxRingBuffer;->peek()Ljava/lang/Object;
move-result-object v12
if-nez v12, :cond_2a
const/4 v10, 0x0
goto :goto_3f
.line 9
:cond_2a
invoke-virtual {v11, v12}, Lrx/internal/util/RxRingBuffer;->isCompleted(Ljava/lang/Object;)Z
move-result v13
if-eqz v13, :cond_39
.line 10
invoke-interface {v2}, Lrx/Observer;->onCompleted()V
.line 11
iget-object v0, p0, Lrx/internal/operators/OperatorZip$Zip;->childSubscription:Lrx/subscriptions/CompositeSubscription;
invoke-virtual {v0}, Lrx/subscriptions/CompositeSubscription;->unsubscribe()V
return-void
.line 12
:cond_39
invoke-virtual {v11, v12}, Lrx/internal/util/RxRingBuffer;->getValue(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v11
aput-object v11, v6, v9
:goto_3f
add-int/lit8 v9, v9, 0x1
goto :goto_1a
:cond_42
if-eqz v10, :cond_a0
.line 13
invoke-virtual {v5}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v9
cmp-long v11, v9, v3
if-lez v11, :cond_a0
.line 14
:try_start_4c
iget-object v9, p0, Lrx/internal/operators/OperatorZip$Zip;->zipFunction:Lrx/functions/FuncN;
invoke-interface {v9, v6}, Lrx/functions/FuncN;->call([Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v9
invoke-interface {v2, v9}, Lrx/Observer;->onNext(Ljava/lang/Object;)V
.line 15
invoke-virtual {v5}, Ljava/util/concurrent/atomic/AtomicLong;->decrementAndGet()J
.line 16
iget v9, p0, Lrx/internal/operators/OperatorZip$Zip;->emitted:I
add-int/2addr v9, v8
iput v9, p0, Lrx/internal/operators/OperatorZip$Zip;->emitted:I
:try_end_5d
.catch Ljava/lang/Throwable; {:try_start_4c .. :try_end_5d} :catch_9b
.line 17
array-length v6, v0
const/4 v8, 0x0
:goto_5f
if-ge v8, v6, :cond_80
aget-object v9, v0, v8
.line 18
check-cast v9, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;
iget-object v9, v9, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;->items:Lrx/internal/util/RxRingBuffer;
.line 19
invoke-virtual {v9}, Lrx/internal/util/RxRingBuffer;->poll()Ljava/lang/Object;
.line 20
invoke-virtual {v9}, Lrx/internal/util/RxRingBuffer;->peek()Ljava/lang/Object;
move-result-object v10
invoke-virtual {v9, v10}, Lrx/internal/util/RxRingBuffer;->isCompleted(Ljava/lang/Object;)Z
move-result v9
if-eqz v9, :cond_7d
.line 21
invoke-interface {v2}, Lrx/Observer;->onCompleted()V
.line 22
iget-object v0, p0, Lrx/internal/operators/OperatorZip$Zip;->childSubscription:Lrx/subscriptions/CompositeSubscription;
invoke-virtual {v0}, Lrx/subscriptions/CompositeSubscription;->unsubscribe()V
return-void
:cond_7d
add-int/lit8 v8, v8, 0x1
goto :goto_5f
.line 23
:cond_80
iget v6, p0, Lrx/internal/operators/OperatorZip$Zip;->emitted:I
sget v8, Lrx/internal/operators/OperatorZip$Zip;->THRESHOLD:I
if-le v6, v8, :cond_14
.line 24
array-length v6, v0
const/4 v8, 0x0
:goto_88
if-ge v8, v6, :cond_97
aget-object v9, v0, v8
.line 25
check-cast v9, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;
iget v10, p0, Lrx/internal/operators/OperatorZip$Zip;->emitted:I
int-to-long v10, v10
invoke-virtual {v9, v10, v11}, Lrx/internal/operators/OperatorZip$Zip$InnerSubscriber;->requestMore(J)V
add-int/lit8 v8, v8, 0x1
goto :goto_88
.line 26
:cond_97
iput v7, p0, Lrx/internal/operators/OperatorZip$Zip;->emitted:I
goto/16 :goto_14
:catch_9b
move-exception v0
.line 27
invoke-static {v0, v2, v6}, Lrx/exceptions/Exceptions;->throwOrReport(Ljava/lang/Throwable;Lrx/Observer;Ljava/lang/Object;)V
return-void
.line 28
:cond_a0
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->decrementAndGet()J
move-result-wide v6
cmp-long v8, v6, v3
if-gtz v8, :cond_14
:cond_a8
return-void
.end method