SpscUnboundedArrayQueue.smali
.class public Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;
.super Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerField;
.source "SpscUnboundedArrayQueue.java"
# interfaces
.implements Lrx/internal/util/unsafe/QueueProgressIndicators;
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"<E:",
"Ljava/lang/Object;",
">",
"Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerField<",
"TE;>;",
"Lrx/internal/util/unsafe/QueueProgressIndicators;"
}
.end annotation
.annotation build Lrx/internal/util/SuppressAnimalSniffer;
.end annotation
# static fields
.field private static final C_INDEX_OFFSET:J
.field private static final HAS_NEXT:Ljava/lang/Object;
.field static final MAX_LOOK_AHEAD_STEP:I
.field private static final P_INDEX_OFFSET:J
.field private static final REF_ARRAY_BASE:J
.field private static final REF_ELEMENT_SHIFT:I
# direct methods
.method static constructor <clinit>()V
.registers 2
const-string v0, "jctools.spsc.max.lookahead.step"
const/16 v1, 0x1000
.line 1
invoke-static {v0, v1}, Ljava/lang/Integer;->getInteger(Ljava/lang/String;I)Ljava/lang/Integer;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
move-result v0
sput v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->MAX_LOOK_AHEAD_STEP:I
.line 2
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
sput-object v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->HAS_NEXT:Ljava/lang/Object;
.line 3
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
const-class v1, [Ljava/lang/Object;
invoke-virtual {v0, v1}, Lsun/misc/Unsafe;->arrayIndexScale(Ljava/lang/Class;)I
move-result v0
const/4 v1, 0x4
if-ne v1, v0, :cond_24
const/4 v0, 0x2
.line 4
sput v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->REF_ELEMENT_SHIFT:I
goto :goto_2b
:cond_24
const/16 v1, 0x8
if-ne v1, v0, :cond_6b
const/4 v0, 0x3
.line 5
sput v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->REF_ELEMENT_SHIFT:I
.line 6
:goto_2b
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
const-class v1, [Ljava/lang/Object;
invoke-virtual {v0, v1}, Lsun/misc/Unsafe;->arrayBaseOffset(Ljava/lang/Class;)I
move-result v0
int-to-long v0, v0
sput-wide v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->REF_ARRAY_BASE:J
.line 7
:try_start_36
const-class v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerFields;
:try_end_38
.catch Ljava/lang/NoSuchFieldException; {:try_start_36 .. :try_end_38} :catch_61
const-string v1, "producerIndex"
:try_start_3a
invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 8
sget-object v1, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
invoke-virtual {v1, v0}, Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J
move-result-wide v0
sput-wide v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->P_INDEX_OFFSET:J
:try_end_46
.catch Ljava/lang/NoSuchFieldException; {:try_start_3a .. :try_end_46} :catch_61
.line 9
:try_start_46
const-class v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerField;
:try_end_48
.catch Ljava/lang/NoSuchFieldException; {:try_start_46 .. :try_end_48} :catch_57
const-string v1, "consumerIndex"
:try_start_4a
invoke-virtual {v0, v1}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v0
.line 10
sget-object v1, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
invoke-virtual {v1, v0}, Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J
move-result-wide v0
sput-wide v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->C_INDEX_OFFSET:J
:try_end_56
.catch Ljava/lang/NoSuchFieldException; {:try_start_4a .. :try_end_56} :catch_57
return-void
:catch_57
move-exception v0
.line 11
new-instance v1, Ljava/lang/InternalError;
invoke-direct {v1}, Ljava/lang/InternalError;-><init>()V
.line 12
invoke-virtual {v1, v0}, Ljava/lang/InternalError;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
.line 13
throw v1
:catch_61
move-exception v0
.line 14
new-instance v1, Ljava/lang/InternalError;
invoke-direct {v1}, Ljava/lang/InternalError;-><init>()V
.line 15
invoke-virtual {v1, v0}, Ljava/lang/InternalError;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
.line 16
throw v1
.line 17
:cond_6b
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Unknown pointer size"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public constructor <init>(I)V
.registers 6
.line 1
invoke-direct {p0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerField;-><init>()V
.line 2
invoke-static {p1}, Lrx/internal/util/unsafe/Pow2;->roundToPowerOfTwo(I)I
move-result p1
add-int/lit8 v0, p1, -0x1
int-to-long v0, v0
add-int/lit8 v2, p1, 0x1
.line 3
new-array v2, v2, [Ljava/lang/Object;
.line 4
iput-object v2, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerBuffer:[Ljava/lang/Object;
.line 5
iput-wide v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerMask:J
.line 6
invoke-direct {p0, p1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->adjustLookAheadStep(I)V
.line 7
iput-object v2, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerBuffer:[Ljava/lang/Object;
.line 8
iput-wide v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerMask:J
const-wide/16 v2, 0x1
sub-long/2addr v0, v2
.line 9
iput-wide v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerLookAhead:J
const-wide/16 v0, 0x0
.line 10
invoke-direct {p0, v0, v1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soProducerIndex(J)V
return-void
.end method
.method private adjustLookAheadStep(I)V
.registers 3
.line 1
div-int/lit8 p1, p1, 0x4
sget v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->MAX_LOOK_AHEAD_STEP:I
invoke-static {p1, v0}, Ljava/lang/Math;->min(II)I
move-result p1
iput p1, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerLookAheadStep:I
return-void
.end method
.method private static calcDirectOffset(J)J
.registers 5
.line 1
sget-wide v0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->REF_ARRAY_BASE:J
sget v2, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->REF_ELEMENT_SHIFT:I
shl-long/2addr p0, v2
add-long/2addr v0, p0
return-wide v0
.end method
.method private static calcWrappedOffset(JJ)J
.registers 4
and-long/2addr p0, p2
.line 1
invoke-static {p0, p1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcDirectOffset(J)J
move-result-wide p0
return-wide p0
.end method
.method private lvConsumerIndex()J
.registers 4
.line 1
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
sget-wide v1, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->C_INDEX_OFFSET:J
invoke-virtual {v0, p0, v1, v2}, Lsun/misc/Unsafe;->getLongVolatile(Ljava/lang/Object;J)J
move-result-wide v0
return-wide v0
.end method
.method private static lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"<E:",
"Ljava/lang/Object;",
">([TE;J)",
"Ljava/lang/Object;"
}
.end annotation
.line 1
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
invoke-virtual {v0, p0, p1, p2}, Lsun/misc/Unsafe;->getObjectVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object p0
return-object p0
.end method
.method private lvNext([Ljava/lang/Object;)[Ljava/lang/Object;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"([TE;)[TE;"
}
.end annotation
.line 1
array-length v0, p1
add-int/lit8 v0, v0, -0x1
int-to-long v0, v0
invoke-static {v0, v1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcDirectOffset(J)J
move-result-wide v0
invoke-static {p1, v0, v1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object p1
check-cast p1, [Ljava/lang/Object;
return-object p1
.end method
.method private lvProducerIndex()J
.registers 4
.line 1
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
sget-wide v1, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->P_INDEX_OFFSET:J
invoke-virtual {v0, p0, v1, v2}, Lsun/misc/Unsafe;->getLongVolatile(Ljava/lang/Object;J)J
move-result-wide v0
return-wide v0
.end method
.method private newBufferPeek([Ljava/lang/Object;JJ)Ljava/lang/Object;
.registers 6
.annotation system Ldalvik/annotation/Signature;
value = {
"([TE;JJ)TE;"
}
.end annotation
.line 1
iput-object p1, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerBuffer:[Ljava/lang/Object;
.line 2
invoke-static {p2, p3, p4, p5}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide p2
.line 3
invoke-static {p1, p2, p3}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method private newBufferPoll([Ljava/lang/Object;JJ)Ljava/lang/Object;
.registers 8
.annotation system Ldalvik/annotation/Signature;
value = {
"([TE;JJ)TE;"
}
.end annotation
.line 1
iput-object p1, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerBuffer:[Ljava/lang/Object;
.line 2
invoke-static {p2, p3, p4, p5}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide p4
.line 3
invoke-static {p1, p4, p5}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object v0
const/4 v1, 0x0
if-nez v0, :cond_e
return-object v1
.line 4
:cond_e
invoke-static {p1, p4, p5, v1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soElement([Ljava/lang/Object;JLjava/lang/Object;)V
const-wide/16 p4, 0x1
add-long/2addr p2, p4
.line 5
invoke-direct {p0, p2, p3}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soConsumerIndex(J)V
return-object v0
.end method
.method private resize([Ljava/lang/Object;JJLjava/lang/Object;J)V
.registers 12
.annotation system Ldalvik/annotation/Signature;
value = {
"([TE;JJTE;J)V"
}
.end annotation
.line 1
array-length v0, p1
.line 2
new-array v0, v0, [Ljava/lang/Object;
.line 3
iput-object v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerBuffer:[Ljava/lang/Object;
add-long/2addr p7, p2
const-wide/16 v1, 0x1
sub-long/2addr p7, v1
.line 4
iput-wide p7, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerLookAhead:J
.line 5
invoke-static {v0, p4, p5, p6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soElement([Ljava/lang/Object;JLjava/lang/Object;)V
.line 6
invoke-direct {p0, p1, v0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soNext([Ljava/lang/Object;[Ljava/lang/Object;)V
.line 7
sget-object p6, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->HAS_NEXT:Ljava/lang/Object;
invoke-static {p1, p4, p5, p6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soElement([Ljava/lang/Object;JLjava/lang/Object;)V
add-long/2addr p2, v1
.line 8
invoke-direct {p0, p2, p3}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soProducerIndex(J)V
return-void
.end method
.method private soConsumerIndex(J)V
.registers 9
.line 1
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
sget-wide v2, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->C_INDEX_OFFSET:J
move-object v1, p0
move-wide v4, p1
invoke-virtual/range {v0 .. v5}, Lsun/misc/Unsafe;->putOrderedLong(Ljava/lang/Object;JJ)V
return-void
.end method
.method private static soElement([Ljava/lang/Object;JLjava/lang/Object;)V
.registers 5
.line 1
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
invoke-virtual {v0, p0, p1, p2, p3}, Lsun/misc/Unsafe;->putOrderedObject(Ljava/lang/Object;JLjava/lang/Object;)V
return-void
.end method
.method private soNext([Ljava/lang/Object;[Ljava/lang/Object;)V
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"([TE;[TE;)V"
}
.end annotation
.line 1
array-length v0, p1
add-int/lit8 v0, v0, -0x1
int-to-long v0, v0
invoke-static {v0, v1}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcDirectOffset(J)J
move-result-wide v0
invoke-static {p1, v0, v1, p2}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soElement([Ljava/lang/Object;JLjava/lang/Object;)V
return-void
.end method
.method private soProducerIndex(J)V
.registers 9
.line 1
sget-object v0, Lrx/internal/util/unsafe/UnsafeAccess;->UNSAFE:Lsun/misc/Unsafe;
sget-wide v2, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->P_INDEX_OFFSET:J
move-object v1, p0
move-wide v4, p1
invoke-virtual/range {v0 .. v5}, Lsun/misc/Unsafe;->putOrderedLong(Ljava/lang/Object;JJ)V
return-void
.end method
.method private writeToQueue([Ljava/lang/Object;Ljava/lang/Object;JJ)Z
.registers 7
.annotation system Ldalvik/annotation/Signature;
value = {
"([TE;TE;JJ)Z"
}
.end annotation
.line 1
invoke-static {p1, p5, p6, p2}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soElement([Ljava/lang/Object;JLjava/lang/Object;)V
const-wide/16 p1, 0x1
add-long/2addr p3, p1
.line 2
invoke-direct {p0, p3, p4}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soProducerIndex(J)V
const/4 p1, 0x1
return p1
.end method
# virtual methods
.method public currentConsumerIndex()J
.registers 3
.line 1
invoke-direct {p0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvConsumerIndex()J
move-result-wide v0
return-wide v0
.end method
.method public currentProducerIndex()J
.registers 3
.line 1
invoke-direct {p0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvProducerIndex()J
move-result-wide v0
return-wide v0
.end method
.method public final iterator()Ljava/util/Iterator;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/Iterator<",
"TE;>;"
}
.end annotation
.line 1
new-instance v0, Ljava/lang/UnsupportedOperationException;
invoke-direct {v0}, Ljava/lang/UnsupportedOperationException;-><init>()V
throw v0
.end method
.method public final offer(Ljava/lang/Object;)Z
.registers 15
.annotation system Ldalvik/annotation/Signature;
value = {
"(TE;)Z"
}
.end annotation
if-eqz p1, :cond_4e
.line 1
iget-object v1, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerBuffer:[Ljava/lang/Object;
.line 2
iget-wide v3, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerFields;->producerIndex:J
.line 3
iget-wide v7, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerMask:J
.line 4
invoke-static {v3, v4, v7, v8}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide v5
.line 5
iget-wide v9, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerLookAhead:J
cmp-long v0, v3, v9
if-gez v0, :cond_19
move-object v0, p0
move-object v2, p1
.line 6
invoke-direct/range {v0 .. v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->writeToQueue([Ljava/lang/Object;Ljava/lang/Object;JJ)Z
move-result p1
return p1
.line 7
:cond_19
iget v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerLookAheadStep:I
int-to-long v9, v0
add-long/2addr v9, v3
.line 8
invoke-static {v9, v10, v7, v8}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide v11
.line 9
invoke-static {v1, v11, v12}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object v0
const-wide/16 v11, 0x1
if-nez v0, :cond_33
sub-long/2addr v9, v11
.line 10
iput-wide v9, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueProducerColdFields;->producerLookAhead:J
move-object v0, p0
move-object v2, p1
.line 11
invoke-direct/range {v0 .. v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->writeToQueue([Ljava/lang/Object;Ljava/lang/Object;JJ)Z
move-result p1
return p1
:cond_33
add-long/2addr v11, v3
.line 12
invoke-static {v11, v12, v7, v8}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide v9
invoke-static {v1, v9, v10}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object v0
if-eqz v0, :cond_45
move-object v0, p0
move-object v2, p1
.line 13
invoke-direct/range {v0 .. v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->writeToQueue([Ljava/lang/Object;Ljava/lang/Object;JJ)Z
move-result p1
return p1
:cond_45
move-object v0, p0
move-wide v2, v3
move-wide v4, v5
move-object v6, p1
.line 14
invoke-direct/range {v0 .. v8}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->resize([Ljava/lang/Object;JJLjava/lang/Object;J)V
const/4 p1, 0x1
return p1
.line 15
:cond_4e
new-instance p1, Ljava/lang/NullPointerException;
const-string v0, "Null is not a valid element"
invoke-direct {p1, v0}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public final peek()Ljava/lang/Object;
.registers 8
.annotation system Ldalvik/annotation/Signature;
value = {
"()TE;"
}
.end annotation
.line 1
iget-object v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerBuffer:[Ljava/lang/Object;
.line 2
iget-wide v3, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerField;->consumerIndex:J
.line 3
iget-wide v5, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerMask:J
.line 4
invoke-static {v3, v4, v5, v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide v1
.line 5
invoke-static {v0, v1, v2}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object v1
.line 6
sget-object v2, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->HAS_NEXT:Ljava/lang/Object;
if-ne v1, v2, :cond_1c
.line 7
invoke-direct {p0, v0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvNext([Ljava/lang/Object;)[Ljava/lang/Object;
move-result-object v2
move-object v1, p0
invoke-direct/range {v1 .. v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->newBufferPeek([Ljava/lang/Object;JJ)Ljava/lang/Object;
move-result-object v0
return-object v0
:cond_1c
return-object v1
.end method
.method public final poll()Ljava/lang/Object;
.registers 11
.annotation system Ldalvik/annotation/Signature;
value = {
"()TE;"
}
.end annotation
.line 1
iget-object v0, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerBuffer:[Ljava/lang/Object;
.line 2
iget-wide v3, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerField;->consumerIndex:J
.line 3
iget-wide v5, p0, Lrx/internal/util/unsafe/SpscUnboundedArrayQueueConsumerColdField;->consumerMask:J
.line 4
invoke-static {v3, v4, v5, v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->calcWrappedOffset(JJ)J
move-result-wide v1
.line 5
invoke-static {v0, v1, v2}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvElement([Ljava/lang/Object;J)Ljava/lang/Object;
move-result-object v7
.line 6
sget-object v8, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->HAS_NEXT:Ljava/lang/Object;
if-ne v7, v8, :cond_14
const/4 v8, 0x1
goto :goto_15
:cond_14
const/4 v8, 0x0
:goto_15
const/4 v9, 0x0
if-eqz v7, :cond_24
if-nez v8, :cond_24
.line 7
invoke-static {v0, v1, v2, v9}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soElement([Ljava/lang/Object;JLjava/lang/Object;)V
const-wide/16 v0, 0x1
add-long/2addr v3, v0
.line 8
invoke-direct {p0, v3, v4}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->soConsumerIndex(J)V
return-object v7
:cond_24
if-eqz v8, :cond_30
.line 9
invoke-direct {p0, v0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvNext([Ljava/lang/Object;)[Ljava/lang/Object;
move-result-object v2
move-object v1, p0
invoke-direct/range {v1 .. v6}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->newBufferPoll([Ljava/lang/Object;JJ)Ljava/lang/Object;
move-result-object v0
return-object v0
:cond_30
return-object v9
.end method
.method public final size()I
.registers 8
.line 1
invoke-direct {p0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvConsumerIndex()J
move-result-wide v0
.line 2
:goto_4
invoke-direct {p0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvProducerIndex()J
move-result-wide v2
.line 3
invoke-direct {p0}, Lrx/internal/util/unsafe/SpscUnboundedArrayQueue;->lvConsumerIndex()J
move-result-wide v4
cmp-long v6, v0, v4
if-nez v6, :cond_13
sub-long/2addr v2, v4
long-to-int v0, v2
return v0
:cond_13
move-wide v0, v4
goto :goto_4
.end method