BackpressureUtils.smali
.class public final Lrx/internal/operators/BackpressureUtils;
.super Ljava/lang/Object;
.source "BackpressureUtils.java"
# static fields
.field static final COMPLETED_MASK:J = -0x8000000000000000L
.field static final REQUESTED_MASK:J = 0x7fffffffffffffffL
# direct methods
.method private constructor <init>()V
.registers 3
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "No instances!"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public static addCap(JJ)J
.registers 5
add-long/2addr p0, p2
const-wide/16 p2, 0x0
cmp-long v0, p0, p2
if-gez v0, :cond_c
const-wide p0, 0x7fffffffffffffffL
:cond_c
return-wide p0
.end method
.method public static getAndAddRequest(Ljava/util/concurrent/atomic/AtomicLong;J)J
.registers 7
.line 1
:cond_0
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v0
.line 2
invoke-static {v0, v1, p1, p2}, Lrx/internal/operators/BackpressureUtils;->addCap(JJ)J
move-result-wide v2
.line 3
invoke-virtual {p0, v0, v1, v2, v3}, Ljava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
move-result v2
if-eqz v2, :cond_0
return-wide v0
.end method
.method public static multiplyCap(JJ)J
.registers 11
mul-long v0, p0, p2
or-long v2, p0, p2
const/16 v4, 0x1f
ushr-long/2addr v2, v4
const-wide/16 v4, 0x0
cmp-long v6, v2, v4
if-eqz v6, :cond_1c
cmp-long v2, p2, v4
if-eqz v2, :cond_1c
.line 1
div-long p2, v0, p2
cmp-long v2, p2, p0
if-eqz v2, :cond_1c
const-wide v0, 0x7fffffffffffffffL
:cond_1c
return-wide v0
.end method
.method public static postCompleteDone(Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/Queue;Lrx/Subscriber;)V
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/atomic/AtomicLong;",
"Ljava/util/Queue<",
"TT;>;",
"Lrx/Subscriber<",
"-TT;>;)V"
}
.end annotation
.line 1
invoke-static {}, Lrx/internal/util/UtilityFunctions;->identity()Lrx/functions/Func1;
move-result-object v0
invoke-static {p0, p1, p2, v0}, Lrx/internal/operators/BackpressureUtils;->postCompleteDone(Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)V
return-void
.end method
.method public static postCompleteDone(Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)V
.registers 13
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
"R:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/atomic/AtomicLong;",
"Ljava/util/Queue<",
"TT;>;",
"Lrx/Subscriber<",
"-TR;>;",
"Lrx/functions/Func1<",
"-TT;+TR;>;)V"
}
.end annotation
.line 2
:cond_0
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v0
const-wide/high16 v2, -0x8000000000000000L
and-long v4, v0, v2
const-wide/16 v6, 0x0
cmp-long v8, v4, v6
if-eqz v8, :cond_f
return-void
:cond_f
or-long/2addr v2, v0
.line 3
invoke-virtual {p0, v0, v1, v2, v3}, Ljava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
move-result v2
if-eqz v2, :cond_0
cmp-long v2, v0, v6
if-eqz v2, :cond_1d
.line 4
invoke-static {p0, p1, p2, p3}, Lrx/internal/operators/BackpressureUtils;->postCompleteDrain(Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)V
:cond_1d
return-void
.end method
.method static postCompleteDrain(Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)V
.registers 14
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
"R:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/atomic/AtomicLong;",
"Ljava/util/Queue<",
"TT;>;",
"Lrx/Subscriber<",
"-TR;>;",
"Lrx/functions/Func1<",
"-TT;+TR;>;)V"
}
.end annotation
.line 1
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v0
const-wide v2, 0x7fffffffffffffffL
cmp-long v4, v0, v2
if-nez v4, :cond_26
.line 2
:goto_d
invoke-virtual {p2}, Lrx/Subscriber;->isUnsubscribed()Z
move-result p0
if-eqz p0, :cond_14
return-void
.line 3
:cond_14
invoke-interface {p1}, Ljava/util/Queue;->poll()Ljava/lang/Object;
move-result-object p0
if-nez p0, :cond_1e
.line 4
invoke-interface {p2}, Lrx/Observer;->onCompleted()V
return-void
.line 5
:cond_1e
invoke-interface {p3, p0}, Lrx/functions/Func1;->call(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p0
invoke-interface {p2, p0}, Lrx/Observer;->onNext(Ljava/lang/Object;)V
goto :goto_d
:cond_26
const-wide/high16 v4, -0x8000000000000000L
move-wide v6, v0
:cond_29
move-wide v0, v4
:cond_2a
:goto_2a
cmp-long v8, v0, v6
if-eqz v8, :cond_4a
.line 6
invoke-virtual {p2}, Lrx/Subscriber;->isUnsubscribed()Z
move-result v8
if-eqz v8, :cond_35
return-void
.line 7
:cond_35
invoke-interface {p1}, Ljava/util/Queue;->poll()Ljava/lang/Object;
move-result-object v8
if-nez v8, :cond_3f
.line 8
invoke-interface {p2}, Lrx/Observer;->onCompleted()V
return-void
.line 9
:cond_3f
invoke-interface {p3, v8}, Lrx/functions/Func1;->call(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v8
invoke-interface {p2, v8}, Lrx/Observer;->onNext(Ljava/lang/Object;)V
const-wide/16 v8, 0x1
add-long/2addr v0, v8
goto :goto_2a
:cond_4a
cmp-long v8, v0, v6
if-nez v8, :cond_5f
.line 10
invoke-virtual {p2}, Lrx/Subscriber;->isUnsubscribed()Z
move-result v6
if-eqz v6, :cond_55
return-void
.line 11
:cond_55
invoke-interface {p1}, Ljava/util/Queue;->isEmpty()Z
move-result v6
if-eqz v6, :cond_5f
.line 12
invoke-interface {p2}, Lrx/Observer;->onCompleted()V
return-void
.line 13
:cond_5f
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v6
cmp-long v8, v6, v0
if-nez v8, :cond_2a
and-long/2addr v0, v2
neg-long v0, v0
.line 14
invoke-virtual {p0, v0, v1}, Ljava/util/concurrent/atomic/AtomicLong;->addAndGet(J)J
move-result-wide v6
cmp-long v0, v6, v4
if-nez v0, :cond_29
return-void
.end method
.method public static postCompleteRequest(Ljava/util/concurrent/atomic/AtomicLong;JLjava/util/Queue;Lrx/Subscriber;)Z
.registers 11
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/atomic/AtomicLong;",
"J",
"Ljava/util/Queue<",
"TT;>;",
"Lrx/Subscriber<",
"-TT;>;)Z"
}
.end annotation
.line 1
invoke-static {}, Lrx/internal/util/UtilityFunctions;->identity()Lrx/functions/Func1;
move-result-object v5
move-object v0, p0
move-wide v1, p1
move-object v3, p3
move-object v4, p4
invoke-static/range {v0 .. v5}, Lrx/internal/operators/BackpressureUtils;->postCompleteRequest(Ljava/util/concurrent/atomic/AtomicLong;JLjava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)Z
move-result p0
return p0
.end method
.method public static postCompleteRequest(Ljava/util/concurrent/atomic/AtomicLong;JLjava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)Z
.registers 21
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
"R:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/atomic/AtomicLong;",
"J",
"Ljava/util/Queue<",
"TT;>;",
"Lrx/Subscriber<",
"-TR;>;",
"Lrx/functions/Func1<",
"-TT;+TR;>;)Z"
}
.end annotation
move-object v0, p0
move-wide/from16 v1, p1
const-wide/16 v3, 0x0
cmp-long v5, v1, v3
if-ltz v5, :cond_50
const/4 v5, 0x1
const/4 v6, 0x0
const-wide/high16 v7, -0x8000000000000000L
cmp-long v9, v1, v3
if-nez v9, :cond_1d
.line 2
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v0
and-long/2addr v0, v7
cmp-long v2, v0, v3
if-nez v2, :cond_1b
goto :goto_1c
:cond_1b
const/4 v5, 0x0
:goto_1c
return v5
.line 3
:cond_1d
:goto_1d
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v9
and-long v11, v9, v7
const-wide v13, 0x7fffffffffffffffL
and-long/2addr v13, v9
.line 4
invoke-static {v13, v14, v1, v2}, Lrx/internal/operators/BackpressureUtils;->addCap(JJ)J
move-result-wide v13
or-long/2addr v13, v11
.line 5
invoke-virtual {p0, v9, v10, v13, v14}, Ljava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
move-result v13
if-eqz v13, :cond_49
cmp-long v1, v9, v7
if-nez v1, :cond_42
move-object/from16 v9, p3
move-object/from16 v10, p4
move-object/from16 v13, p5
.line 6
invoke-static {p0, v9, v10, v13}, Lrx/internal/operators/BackpressureUtils;->postCompleteDrain(Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/Queue;Lrx/Subscriber;Lrx/functions/Func1;)V
return v6
:cond_42
cmp-long v0, v11, v3
if-nez v0, :cond_47
goto :goto_48
:cond_47
const/4 v5, 0x0
:goto_48
return v5
:cond_49
move-object/from16 v9, p3
move-object/from16 v10, p4
move-object/from16 v13, p5
goto :goto_1d
.line 7
:cond_50
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "n >= 0 required but it was "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3, v1, v2}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
goto :goto_68
:goto_67
throw v0
:goto_68
goto :goto_67
.end method
.method public static produced(Ljava/util/concurrent/atomic/AtomicLong;J)J
.registers 10
.line 1
:cond_0
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v0
const-wide v2, 0x7fffffffffffffffL
cmp-long v4, v0, v2
if-nez v4, :cond_e
return-wide v2
:cond_e
sub-long v2, v0, p1
const-wide/16 v4, 0x0
cmp-long v6, v2, v4
if-ltz v6, :cond_1d
.line 2
invoke-virtual {p0, v0, v1, v2, v3}, Ljava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
move-result v0
if-eqz v0, :cond_0
return-wide v2
.line 3
:cond_1d
new-instance p0, Ljava/lang/IllegalStateException;
new-instance p1, Ljava/lang/StringBuilder;
invoke-direct {p1}, Ljava/lang/StringBuilder;-><init>()V
const-string p2, "More produced than requested: "
invoke-virtual {p1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p1, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {p0, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
goto :goto_35
:goto_34
throw p0
:goto_35
goto :goto_34
.end method
.method public static validate(J)Z
.registers 5
const-wide/16 v0, 0x0
cmp-long v2, p0, v0
if-ltz v2, :cond_e
cmp-long v2, p0, v0
if-eqz v2, :cond_c
const/4 p0, 0x1
goto :goto_d
:cond_c
const/4 p0, 0x0
:goto_d
return p0
.line 1
:cond_e
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "n >= 0 required but it was "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, p0, p1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
invoke-direct {v0, p0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.end method