QueueDrainObserver.smali 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. .class public abstract Lio/reactivex/internal/observers/QueueDrainObserver;
  2. .super Lio/reactivex/internal/observers/QueueDrainSubscriberPad2;
  3. .source "QueueDrainObserver.java"
  4. # interfaces
  5. .implements Lio/reactivex/Observer;
  6. .implements Lio/reactivex/internal/util/ObservableQueueDrain;
  7. # annotations
  8. .annotation system Ldalvik/annotation/Signature;
  9. value = {
  10. "<T:",
  11. "Ljava/lang/Object;",
  12. "U:",
  13. "Ljava/lang/Object;",
  14. "V:",
  15. "Ljava/lang/Object;",
  16. ">",
  17. "Lio/reactivex/internal/observers/QueueDrainSubscriberPad2;",
  18. "Lio/reactivex/Observer<",
  19. "TT;>;",
  20. "Lio/reactivex/internal/util/ObservableQueueDrain<",
  21. "TU;TV;>;"
  22. }
  23. .end annotation
  24. # instance fields
  25. .field protected final actual:Lio/reactivex/Observer;
  26. .annotation system Ldalvik/annotation/Signature;
  27. value = {
  28. "Lio/reactivex/Observer<",
  29. "-TV;>;"
  30. }
  31. .end annotation
  32. .end field
  33. .field protected volatile cancelled:Z
  34. .field protected volatile done:Z
  35. .field protected error:Ljava/lang/Throwable;
  36. .field protected final queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  37. .annotation system Ldalvik/annotation/Signature;
  38. value = {
  39. "Lio/reactivex/internal/fuseable/SimpleQueue<",
  40. "TU;>;"
  41. }
  42. .end annotation
  43. .end field
  44. # direct methods
  45. .method public constructor <init>(Lio/reactivex/Observer;Lio/reactivex/internal/fuseable/SimpleQueue;)V
  46. .locals 0
  47. .annotation system Ldalvik/annotation/Signature;
  48. value = {
  49. "(",
  50. "Lio/reactivex/Observer<",
  51. "-TV;>;",
  52. "Lio/reactivex/internal/fuseable/SimpleQueue<",
  53. "TU;>;)V"
  54. }
  55. .end annotation
  56. .line 40
  57. invoke-direct {p0}, Lio/reactivex/internal/observers/QueueDrainSubscriberPad2;-><init>()V
  58. .line 41
  59. iput-object p1, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->actual:Lio/reactivex/Observer;
  60. .line 42
  61. iput-object p2, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  62. return-void
  63. .end method
  64. # virtual methods
  65. .method public accept(Lio/reactivex/Observer;Ljava/lang/Object;)V
  66. .locals 0
  67. .annotation system Ldalvik/annotation/Signature;
  68. value = {
  69. "(",
  70. "Lio/reactivex/Observer<",
  71. "-TV;>;TU;)V"
  72. }
  73. .end annotation
  74. return-void
  75. .end method
  76. .method public final cancelled()Z
  77. .locals 1
  78. .line 47
  79. iget-boolean v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->cancelled:Z
  80. return v0
  81. .end method
  82. .method public final done()Z
  83. .locals 1
  84. .line 52
  85. iget-boolean v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->done:Z
  86. return v0
  87. .end method
  88. .method public drain(ZLio/reactivex/disposables/Disposable;)V
  89. .locals 2
  90. .line 121
  91. invoke-virtual {p0}, Lio/reactivex/internal/observers/QueueDrainObserver;->enter()Z
  92. move-result v0
  93. if-eqz v0, :cond_0
  94. .line 122
  95. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  96. iget-object v1, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->actual:Lio/reactivex/Observer;
  97. invoke-static {v0, v1, p1, p2, p0}, Lio/reactivex/internal/util/QueueDrainHelper;->drainLoop(Lio/reactivex/internal/fuseable/SimpleQueue;Lio/reactivex/Observer;ZLio/reactivex/disposables/Disposable;Lio/reactivex/internal/util/ObservableQueueDrain;)V
  98. :cond_0
  99. return-void
  100. .end method
  101. .method public final enter()Z
  102. .locals 1
  103. .line 57
  104. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  105. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I
  106. move-result v0
  107. if-nez v0, :cond_0
  108. const/4 v0, 0x1
  109. goto :goto_0
  110. :cond_0
  111. const/4 v0, 0x0
  112. :goto_0
  113. return v0
  114. .end method
  115. .method public final error()Ljava/lang/Throwable;
  116. .locals 1
  117. .line 112
  118. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->error:Ljava/lang/Throwable;
  119. return-object v0
  120. .end method
  121. .method public final fastEnter()Z
  122. .locals 3
  123. .line 61
  124. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  125. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I
  126. move-result v0
  127. const/4 v1, 0x1
  128. const/4 v2, 0x0
  129. if-nez v0, :cond_0
  130. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  131. invoke-virtual {v0, v2, v1}, Ljava/util/concurrent/atomic/AtomicInteger;->compareAndSet(II)Z
  132. move-result v0
  133. if-eqz v0, :cond_0
  134. goto :goto_0
  135. :cond_0
  136. const/4 v1, 0x0
  137. :goto_0
  138. return v1
  139. .end method
  140. .method protected final fastPathEmit(Ljava/lang/Object;ZLio/reactivex/disposables/Disposable;)V
  141. .locals 5
  142. .annotation system Ldalvik/annotation/Signature;
  143. value = {
  144. "(TU;Z",
  145. "Lio/reactivex/disposables/Disposable;",
  146. ")V"
  147. }
  148. .end annotation
  149. .line 65
  150. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->actual:Lio/reactivex/Observer;
  151. .line 66
  152. iget-object v1, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  153. .line 68
  154. iget-object v2, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  155. invoke-virtual {v2}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I
  156. move-result v2
  157. if-nez v2, :cond_0
  158. iget-object v2, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  159. const/4 v3, 0x0
  160. const/4 v4, 0x1
  161. invoke-virtual {v2, v3, v4}, Ljava/util/concurrent/atomic/AtomicInteger;->compareAndSet(II)Z
  162. move-result v2
  163. if-eqz v2, :cond_0
  164. .line 69
  165. invoke-virtual {p0, v0, p1}, Lio/reactivex/internal/observers/QueueDrainObserver;->accept(Lio/reactivex/Observer;Ljava/lang/Object;)V
  166. const/4 p1, -0x1
  167. .line 70
  168. invoke-virtual {p0, p1}, Lio/reactivex/internal/observers/QueueDrainObserver;->leave(I)I
  169. move-result p1
  170. if-nez p1, :cond_1
  171. return-void
  172. .line 74
  173. :cond_0
  174. invoke-interface {v1, p1}, Lio/reactivex/internal/fuseable/SimpleQueue;->offer(Ljava/lang/Object;)Z
  175. .line 75
  176. invoke-virtual {p0}, Lio/reactivex/internal/observers/QueueDrainObserver;->enter()Z
  177. move-result p1
  178. if-nez p1, :cond_1
  179. return-void
  180. .line 79
  181. :cond_1
  182. invoke-static {v1, v0, p2, p3, p0}, Lio/reactivex/internal/util/QueueDrainHelper;->drainLoop(Lio/reactivex/internal/fuseable/SimpleQueue;Lio/reactivex/Observer;ZLio/reactivex/disposables/Disposable;Lio/reactivex/internal/util/ObservableQueueDrain;)V
  183. return-void
  184. .end method
  185. .method protected final fastPathOrderedEmit(Ljava/lang/Object;ZLio/reactivex/disposables/Disposable;)V
  186. .locals 5
  187. .annotation system Ldalvik/annotation/Signature;
  188. value = {
  189. "(TU;Z",
  190. "Lio/reactivex/disposables/Disposable;",
  191. ")V"
  192. }
  193. .end annotation
  194. .line 89
  195. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->actual:Lio/reactivex/Observer;
  196. .line 90
  197. iget-object v1, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->queue:Lio/reactivex/internal/fuseable/SimpleQueue;
  198. .line 92
  199. iget-object v2, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  200. invoke-virtual {v2}, Ljava/util/concurrent/atomic/AtomicInteger;->get()I
  201. move-result v2
  202. if-nez v2, :cond_1
  203. iget-object v2, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  204. const/4 v3, 0x0
  205. const/4 v4, 0x1
  206. invoke-virtual {v2, v3, v4}, Ljava/util/concurrent/atomic/AtomicInteger;->compareAndSet(II)Z
  207. move-result v2
  208. if-eqz v2, :cond_1
  209. .line 93
  210. invoke-interface {v1}, Lio/reactivex/internal/fuseable/SimpleQueue;->isEmpty()Z
  211. move-result v2
  212. if-eqz v2, :cond_0
  213. .line 94
  214. invoke-virtual {p0, v0, p1}, Lio/reactivex/internal/observers/QueueDrainObserver;->accept(Lio/reactivex/Observer;Ljava/lang/Object;)V
  215. const/4 p1, -0x1
  216. .line 95
  217. invoke-virtual {p0, p1}, Lio/reactivex/internal/observers/QueueDrainObserver;->leave(I)I
  218. move-result p1
  219. if-nez p1, :cond_2
  220. return-void
  221. .line 99
  222. :cond_0
  223. invoke-interface {v1, p1}, Lio/reactivex/internal/fuseable/SimpleQueue;->offer(Ljava/lang/Object;)Z
  224. goto :goto_0
  225. .line 102
  226. :cond_1
  227. invoke-interface {v1, p1}, Lio/reactivex/internal/fuseable/SimpleQueue;->offer(Ljava/lang/Object;)Z
  228. .line 103
  229. invoke-virtual {p0}, Lio/reactivex/internal/observers/QueueDrainObserver;->enter()Z
  230. move-result p1
  231. if-nez p1, :cond_2
  232. return-void
  233. .line 107
  234. :cond_2
  235. :goto_0
  236. invoke-static {v1, v0, p2, p3, p0}, Lio/reactivex/internal/util/QueueDrainHelper;->drainLoop(Lio/reactivex/internal/fuseable/SimpleQueue;Lio/reactivex/Observer;ZLio/reactivex/disposables/Disposable;Lio/reactivex/internal/util/ObservableQueueDrain;)V
  237. return-void
  238. .end method
  239. .method public final leave(I)I
  240. .locals 1
  241. .line 117
  242. iget-object v0, p0, Lio/reactivex/internal/observers/QueueDrainObserver;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  243. invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I
  244. move-result p1
  245. return p1
  246. .end method