.class public final Lio/reactivex/internal/queue/MpscLinkedQueue; .super Ljava/lang/Object; .source "MpscLinkedQueue.java" # interfaces .implements Lio/reactivex/internal/fuseable/SimplePlainQueue; # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; } .end annotation .annotation system Ldalvik/annotation/Signature; value = { "", "Ljava/lang/Object;", "Lio/reactivex/internal/fuseable/SimplePlainQueue<", "TT;>;" } .end annotation # instance fields .field private final consumerNode:Ljava/util/concurrent/atomic/AtomicReference; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/atomic/AtomicReference<", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;>;" } .end annotation .end field .field private final producerNode:Ljava/util/concurrent/atomic/AtomicReference; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/concurrent/atomic/AtomicReference<", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;>;" } .end annotation .end field # direct methods .method public constructor ()V .locals 1 .line 33 invoke-direct {p0}, Ljava/lang/Object;->()V .line 34 new-instance v0, Ljava/util/concurrent/atomic/AtomicReference; invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;->()V iput-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->producerNode:Ljava/util/concurrent/atomic/AtomicReference; .line 35 new-instance v0, Ljava/util/concurrent/atomic/AtomicReference; invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;->()V iput-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->consumerNode:Ljava/util/concurrent/atomic/AtomicReference; .line 36 new-instance v0, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; invoke-direct {v0}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->()V .line 37 invoke-virtual {p0, v0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->spConsumerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)V .line 38 invoke-virtual {p0, v0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->xchgProducerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; return-void .end method # virtual methods .method public clear()V .locals 1 .line 116 :goto_0 invoke-virtual {p0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->poll()Ljava/lang/Object; move-result-object v0 if-eqz v0, :cond_0 invoke-virtual {p0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->isEmpty()Z move-result v0 if-nez v0, :cond_0 goto :goto_0 :cond_0 return-void .end method .method public isEmpty()Z .locals 2 .line 145 invoke-virtual {p0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->lvConsumerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object v0 invoke-virtual {p0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->lvProducerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object v1 if-ne v0, v1, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method lpConsumerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "()", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;" } .end annotation .line 129 iget-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->consumerNode:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object; move-result-object v0 check-cast v0, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; return-object v0 .end method .method lvConsumerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "()", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;" } .end annotation .line 125 iget-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->consumerNode:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object; move-result-object v0 check-cast v0, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; return-object v0 .end method .method lvProducerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "()", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;" } .end annotation .line 119 iget-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->producerNode:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object; move-result-object v0 check-cast v0, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; return-object v0 .end method .method public offer(Ljava/lang/Object;)Z .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(TT;)Z" } .end annotation if-eqz p1, :cond_0 .line 61 new-instance v0, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; invoke-direct {v0, p1}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->(Ljava/lang/Object;)V .line 62 invoke-virtual {p0, v0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->xchgProducerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object p1 .line 65 invoke-virtual {p1, v0}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->soNext(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)V const/4 p1, 0x1 return p1 .line 59 :cond_0 new-instance p1, Ljava/lang/NullPointerException; const-string v0, "Null is not a valid element" invoke-direct {p1, v0}, Ljava/lang/NullPointerException;->(Ljava/lang/String;)V throw p1 .end method .method public offer(Ljava/lang/Object;Ljava/lang/Object;)Z .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(TT;TT;)Z" } .end annotation .line 109 invoke-virtual {p0, p1}, Lio/reactivex/internal/queue/MpscLinkedQueue;->offer(Ljava/lang/Object;)Z .line 110 invoke-virtual {p0, p2}, Lio/reactivex/internal/queue/MpscLinkedQueue;->offer(Ljava/lang/Object;)Z const/4 p1, 0x1 return p1 .end method .method public poll()Ljava/lang/Object; .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "()TT;" } .end annotation .line 86 invoke-virtual {p0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->lpConsumerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object v0 .line 87 invoke-virtual {v0}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->lvNext()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object v1 if-eqz v1, :cond_0 .line 90 invoke-virtual {v1}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->getAndNullValue()Ljava/lang/Object; move-result-object v0 .line 91 invoke-virtual {p0, v1}, Lio/reactivex/internal/queue/MpscLinkedQueue;->spConsumerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)V return-object v0 .line 94 :cond_0 invoke-virtual {p0}, Lio/reactivex/internal/queue/MpscLinkedQueue;->lvProducerNode()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object v1 if-eq v0, v1, :cond_2 .line 96 :goto_0 invoke-virtual {v0}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->lvNext()Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; move-result-object v1 if-nez v1, :cond_1 goto :goto_0 .line 100 :cond_1 invoke-virtual {v1}, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;->getAndNullValue()Ljava/lang/Object; move-result-object v0 .line 101 invoke-virtual {p0, v1}, Lio/reactivex/internal/queue/MpscLinkedQueue;->spConsumerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)V return-object v0 :cond_2 const/4 v0, 0x0 return-object v0 .end method .method spConsumerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)V .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;)V" } .end annotation .line 132 iget-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->consumerNode:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V return-void .end method .method xchgProducerNode(Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode;)Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;)", "Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode<", "TT;>;" } .end annotation .line 122 iget-object v0, p0, Lio/reactivex/internal/queue/MpscLinkedQueue;->producerNode:Ljava/util/concurrent/atomic/AtomicReference; invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Lio/reactivex/internal/queue/MpscLinkedQueue$LinkedQueueNode; return-object p1 .end method