InnerQueuedSubscriber.smali 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. .class public final Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;
  2. .super Ljava/util/concurrent/atomic/AtomicReference;
  3. .source "InnerQueuedSubscriber.java"
  4. # interfaces
  5. .implements Lorg/reactivestreams/Subscriber;
  6. .implements Lorg/reactivestreams/Subscription;
  7. # annotations
  8. .annotation system Ldalvik/annotation/Signature;
  9. value = {
  10. "<T:",
  11. "Ljava/lang/Object;",
  12. ">",
  13. "Ljava/util/concurrent/atomic/AtomicReference<",
  14. "Lorg/reactivestreams/Subscription;",
  15. ">;",
  16. "Lorg/reactivestreams/Subscriber<",
  17. "TT;>;",
  18. "Lorg/reactivestreams/Subscription;"
  19. }
  20. .end annotation
  21. # static fields
  22. .field private static final serialVersionUID:J = 0x51462814a312b8L
  23. # instance fields
  24. .field volatile done:Z
  25. .field fusionMode:I
  26. .field final limit:I
  27. .field final parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  28. .annotation system Ldalvik/annotation/Signature;
  29. value = {
  30. "Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport<",
  31. "TT;>;"
  32. }
  33. .end annotation
  34. .end field
  35. .field final prefetch:I
  36. .field produced:J
  37. .field volatile queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  38. .annotation system Ldalvik/annotation/Signature;
  39. value = {
  40. "Lio/reactivex/internal/fuseable/SimpleQueue<",
  41. "TT;>;"
  42. }
  43. .end annotation
  44. .end field
  45. # direct methods
  46. .method public constructor <init>(Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;I)V
  47. .locals 0
  48. .annotation system Ldalvik/annotation/Signature;
  49. value = {
  50. "(",
  51. "Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport<",
  52. "TT;>;I)V"
  53. }
  54. .end annotation
  55. .line 51
  56. invoke-direct {p0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
  57. .line 52
  58. iput-object p1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  59. .line 53
  60. iput p2, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->prefetch:I
  61. shr-int/lit8 p1, p2, 0x2
  62. sub-int/2addr p2, p1
  63. .line 54
  64. iput p2, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->limit:I
  65. return-void
  66. .end method
  67. # virtual methods
  68. .method public cancel()V
  69. .locals 0
  70. .line 132
  71. invoke-static {p0}, Lio/reactivex/internal/subscriptions/SubscriptionHelper;->cancel(Ljava/util/concurrent/atomic/AtomicReference;)Z
  72. return-void
  73. .end method
  74. .method public isDone()Z
  75. .locals 1
  76. .line 136
  77. iget-boolean v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->done:Z
  78. return v0
  79. .end method
  80. .method public onComplete()V
  81. .locals 1
  82. .line 102
  83. iget-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  84. invoke-interface {v0, p0}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;->innerComplete(Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;)V
  85. return-void
  86. .end method
  87. .method public onError(Ljava/lang/Throwable;)V
  88. .locals 1
  89. .line 97
  90. iget-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  91. invoke-interface {v0, p0, p1}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;->innerError(Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;Ljava/lang/Throwable;)V
  92. return-void
  93. .end method
  94. .method public onNext(Ljava/lang/Object;)V
  95. .locals 1
  96. .annotation system Ldalvik/annotation/Signature;
  97. value = {
  98. "(TT;)V"
  99. }
  100. .end annotation
  101. .line 88
  102. iget v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->fusionMode:I
  103. if-nez v0, :cond_0
  104. .line 89
  105. iget-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  106. invoke-interface {v0, p0, p1}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;->innerNext(Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;Ljava/lang/Object;)V
  107. goto :goto_0
  108. .line 91
  109. :cond_0
  110. iget-object p1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  111. invoke-interface {p1}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;->drain()V
  112. :goto_0
  113. return-void
  114. .end method
  115. .method public onSubscribe(Lorg/reactivestreams/Subscription;)V
  116. .locals 3
  117. .line 59
  118. invoke-static {p0, p1}, Lio/reactivex/internal/subscriptions/SubscriptionHelper;->setOnce(Ljava/util/concurrent/atomic/AtomicReference;Lorg/reactivestreams/Subscription;)Z
  119. move-result v0
  120. if-eqz v0, :cond_2
  121. .line 60
  122. instance-of v0, p1, Lio/reactivex/internal/fuseable/QueueSubscription;
  123. if-eqz v0, :cond_1
  124. .line 62
  125. move-object v0, p1
  126. check-cast v0, Lio/reactivex/internal/fuseable/QueueSubscription;
  127. const/4 v1, 0x3
  128. .line 64
  129. invoke-interface {v0, v1}, Lio/reactivex/internal/fuseable/QueueSubscription;->requestFusion(I)I
  130. move-result v1
  131. const/4 v2, 0x1
  132. if-ne v1, v2, :cond_0
  133. .line 66
  134. iput v1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->fusionMode:I
  135. .line 67
  136. iput-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  137. .line 68
  138. iput-boolean v2, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->done:Z
  139. .line 69
  140. iget-object p1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->parent:Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;
  141. invoke-interface {p1, p0}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriberSupport;->innerComplete(Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;)V
  142. return-void
  143. :cond_0
  144. const/4 v2, 0x2
  145. if-ne v1, v2, :cond_1
  146. .line 73
  147. iput v1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->fusionMode:I
  148. .line 74
  149. iput-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  150. .line 75
  151. iget v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->prefetch:I
  152. invoke-static {p1, v0}, Lio/reactivex/internal/util/QueueDrainHelper;->request(Lorg/reactivestreams/Subscription;I)V
  153. return-void
  154. .line 80
  155. :cond_1
  156. iget v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->prefetch:I
  157. invoke-static {v0}, Lio/reactivex/internal/util/QueueDrainHelper;->createQueue(I)Lio/reactivex/internal/fuseable/SimpleQueue;
  158. move-result-object v0
  159. iput-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  160. .line 82
  161. iget v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->prefetch:I
  162. invoke-static {p1, v0}, Lio/reactivex/internal/util/QueueDrainHelper;->request(Lorg/reactivestreams/Subscription;I)V
  163. :cond_2
  164. return-void
  165. .end method
  166. .method public queue()Lio/reactivex/internal/fuseable/SimpleQueue;
  167. .locals 1
  168. .annotation system Ldalvik/annotation/Signature;
  169. value = {
  170. "()",
  171. "Lio/reactivex/internal/fuseable/SimpleQueue<",
  172. "TT;>;"
  173. }
  174. .end annotation
  175. .line 144
  176. iget-object v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  177. return-object v0
  178. .end method
  179. .method public request(J)V
  180. .locals 3
  181. .line 107
  182. iget v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->fusionMode:I
  183. const/4 v1, 0x1
  184. if-eq v0, v1, :cond_1
  185. .line 108
  186. iget-wide v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->produced:J
  187. add-long/2addr v0, p1
  188. .line 109
  189. iget p1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->limit:I
  190. int-to-long p1, p1
  191. cmp-long v2, v0, p1
  192. if-ltz v2, :cond_0
  193. const-wide/16 p1, 0x0
  194. .line 110
  195. iput-wide p1, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->produced:J
  196. .line 111
  197. invoke-virtual {p0}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->get()Ljava/lang/Object;
  198. move-result-object p1
  199. check-cast p1, Lorg/reactivestreams/Subscription;
  200. invoke-interface {p1, v0, v1}, Lorg/reactivestreams/Subscription;->request(J)V
  201. goto :goto_0
  202. .line 113
  203. :cond_0
  204. iput-wide v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->produced:J
  205. :cond_1
  206. :goto_0
  207. return-void
  208. .end method
  209. .method public requestOne()V
  210. .locals 5
  211. .line 119
  212. iget v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->fusionMode:I
  213. const/4 v1, 0x1
  214. if-eq v0, v1, :cond_1
  215. .line 120
  216. iget-wide v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->produced:J
  217. const-wide/16 v2, 0x1
  218. add-long/2addr v0, v2
  219. .line 121
  220. iget v2, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->limit:I
  221. int-to-long v2, v2
  222. cmp-long v4, v0, v2
  223. if-nez v4, :cond_0
  224. const-wide/16 v2, 0x0
  225. .line 122
  226. iput-wide v2, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->produced:J
  227. .line 123
  228. invoke-virtual {p0}, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->get()Ljava/lang/Object;
  229. move-result-object v2
  230. check-cast v2, Lorg/reactivestreams/Subscription;
  231. invoke-interface {v2, v0, v1}, Lorg/reactivestreams/Subscription;->request(J)V
  232. goto :goto_0
  233. .line 125
  234. :cond_0
  235. iput-wide v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->produced:J
  236. :cond_1
  237. :goto_0
  238. return-void
  239. .end method
  240. .method public setDone()V
  241. .locals 1
  242. const/4 v0, 0x1
  243. .line 140
  244. iput-boolean v0, p0, Lio/reactivex/internal/subscribers/InnerQueuedSubscriber;->done:Z
  245. return-void
  246. .end method