ObserverFullArbiter.smali 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. .class public final Lio/reactivex/internal/disposables/ObserverFullArbiter;
  2. .super Lio/reactivex/internal/disposables/FullArbiterPad1;
  3. .source "ObserverFullArbiter.java"
  4. # interfaces
  5. .implements Lio/reactivex/disposables/Disposable;
  6. # annotations
  7. .annotation system Ldalvik/annotation/Signature;
  8. value = {
  9. "<T:",
  10. "Ljava/lang/Object;",
  11. ">",
  12. "Lio/reactivex/internal/disposables/FullArbiterPad1;",
  13. "Lio/reactivex/disposables/Disposable;"
  14. }
  15. .end annotation
  16. # instance fields
  17. .field final actual:Lio/reactivex/Observer;
  18. .annotation system Ldalvik/annotation/Signature;
  19. value = {
  20. "Lio/reactivex/Observer<",
  21. "-TT;>;"
  22. }
  23. .end annotation
  24. .end field
  25. .field volatile cancelled:Z
  26. .field final queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  27. .annotation system Ldalvik/annotation/Signature;
  28. value = {
  29. "Lio/reactivex/internal/queue/SpscLinkedArrayQueue<",
  30. "Ljava/lang/Object;",
  31. ">;"
  32. }
  33. .end annotation
  34. .end field
  35. .field resource:Lio/reactivex/disposables/Disposable;
  36. .field volatile s:Lio/reactivex/disposables/Disposable;
  37. # direct methods
  38. .method public constructor <init>(Lio/reactivex/Observer;Lio/reactivex/disposables/Disposable;I)V
  39. .locals 0
  40. .annotation system Ldalvik/annotation/Signature;
  41. value = {
  42. "(",
  43. "Lio/reactivex/Observer<",
  44. "-TT;>;",
  45. "Lio/reactivex/disposables/Disposable;",
  46. "I)V"
  47. }
  48. .end annotation
  49. .line 40
  50. invoke-direct {p0}, Lio/reactivex/internal/disposables/FullArbiterPad1;-><init>()V
  51. .line 41
  52. iput-object p1, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->actual:Lio/reactivex/Observer;
  53. .line 42
  54. iput-object p2, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->resource:Lio/reactivex/disposables/Disposable;
  55. .line 43
  56. new-instance p1, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  57. invoke-direct {p1, p3}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;-><init>(I)V
  58. iput-object p1, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  59. .line 44
  60. sget-object p1, Lio/reactivex/internal/disposables/EmptyDisposable;->INSTANCE:Lio/reactivex/internal/disposables/EmptyDisposable;
  61. iput-object p1, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->s:Lio/reactivex/disposables/Disposable;
  62. return-void
  63. .end method
  64. # virtual methods
  65. .method public dispose()V
  66. .locals 1
  67. .line 49
  68. iget-boolean v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  69. if-nez v0, :cond_0
  70. const/4 v0, 0x1
  71. .line 50
  72. iput-boolean v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  73. .line 51
  74. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->disposeResource()V
  75. :cond_0
  76. return-void
  77. .end method
  78. .method disposeResource()V
  79. .locals 2
  80. .line 62
  81. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->resource:Lio/reactivex/disposables/Disposable;
  82. const/4 v1, 0x0
  83. .line 63
  84. iput-object v1, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->resource:Lio/reactivex/disposables/Disposable;
  85. if-eqz v0, :cond_0
  86. .line 65
  87. invoke-interface {v0}, Lio/reactivex/disposables/Disposable;->dispose()V
  88. :cond_0
  89. return-void
  90. .end method
  91. .method drain()V
  92. .locals 7
  93. .line 104
  94. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  95. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->getAndIncrement()I
  96. move-result v0
  97. if-eqz v0, :cond_0
  98. return-void
  99. .line 110
  100. :cond_0
  101. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  102. .line 111
  103. iget-object v1, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->actual:Lio/reactivex/Observer;
  104. const/4 v2, 0x1
  105. const/4 v3, 0x1
  106. .line 116
  107. :cond_1
  108. :goto_0
  109. invoke-virtual {v0}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->poll()Ljava/lang/Object;
  110. move-result-object v4
  111. if-nez v4, :cond_2
  112. .line 157
  113. iget-object v4, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->wip:Ljava/util/concurrent/atomic/AtomicInteger;
  114. neg-int v3, v3
  115. invoke-virtual {v4, v3}, Ljava/util/concurrent/atomic/AtomicInteger;->addAndGet(I)I
  116. move-result v3
  117. if-nez v3, :cond_1
  118. return-void
  119. .line 121
  120. :cond_2
  121. invoke-virtual {v0}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->poll()Ljava/lang/Object;
  122. move-result-object v5
  123. .line 123
  124. iget-object v6, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->s:Lio/reactivex/disposables/Disposable;
  125. if-ne v4, v6, :cond_1
  126. .line 124
  127. invoke-static {v5}, Lio/reactivex/internal/util/NotificationLite;->isDisposable(Ljava/lang/Object;)Z
  128. move-result v4
  129. if-eqz v4, :cond_4
  130. .line 125
  131. invoke-static {v5}, Lio/reactivex/internal/util/NotificationLite;->getDisposable(Ljava/lang/Object;)Lio/reactivex/disposables/Disposable;
  132. move-result-object v4
  133. .line 126
  134. iget-object v5, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->s:Lio/reactivex/disposables/Disposable;
  135. invoke-interface {v5}, Lio/reactivex/disposables/Disposable;->dispose()V
  136. .line 127
  137. iget-boolean v5, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  138. if-nez v5, :cond_3
  139. .line 128
  140. iput-object v4, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->s:Lio/reactivex/disposables/Disposable;
  141. goto :goto_0
  142. .line 130
  143. :cond_3
  144. invoke-interface {v4}, Lio/reactivex/disposables/Disposable;->dispose()V
  145. goto :goto_0
  146. .line 132
  147. :cond_4
  148. invoke-static {v5}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  149. move-result v4
  150. if-eqz v4, :cond_6
  151. .line 133
  152. invoke-virtual {v0}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->clear()V
  153. .line 134
  154. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->disposeResource()V
  155. .line 136
  156. invoke-static {v5}, Lio/reactivex/internal/util/NotificationLite;->getError(Ljava/lang/Object;)Ljava/lang/Throwable;
  157. move-result-object v4
  158. .line 137
  159. iget-boolean v5, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  160. if-nez v5, :cond_5
  161. .line 138
  162. iput-boolean v2, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  163. .line 139
  164. invoke-interface {v1, v4}, Lio/reactivex/Observer;->onError(Ljava/lang/Throwable;)V
  165. goto :goto_0
  166. .line 141
  167. :cond_5
  168. invoke-static {v4}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  169. goto :goto_0
  170. .line 143
  171. :cond_6
  172. invoke-static {v5}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  173. move-result v4
  174. if-eqz v4, :cond_7
  175. .line 144
  176. invoke-virtual {v0}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->clear()V
  177. .line 145
  178. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->disposeResource()V
  179. .line 147
  180. iget-boolean v4, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  181. if-nez v4, :cond_1
  182. .line 148
  183. iput-boolean v2, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  184. .line 149
  185. invoke-interface {v1}, Lio/reactivex/Observer;->onComplete()V
  186. goto :goto_0
  187. .line 152
  188. :cond_7
  189. invoke-static {v5}, Lio/reactivex/internal/util/NotificationLite;->getValue(Ljava/lang/Object;)Ljava/lang/Object;
  190. move-result-object v4
  191. invoke-interface {v1, v4}, Lio/reactivex/Observer;->onNext(Ljava/lang/Object;)V
  192. goto :goto_0
  193. .end method
  194. .method public isDisposed()Z
  195. .locals 1
  196. .line 57
  197. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->resource:Lio/reactivex/disposables/Disposable;
  198. if-eqz v0, :cond_0
  199. .line 58
  200. invoke-interface {v0}, Lio/reactivex/disposables/Disposable;->isDisposed()Z
  201. move-result v0
  202. goto :goto_0
  203. :cond_0
  204. iget-boolean v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  205. :goto_0
  206. return v0
  207. .end method
  208. .method public onComplete(Lio/reactivex/disposables/Disposable;)V
  209. .locals 2
  210. .line 99
  211. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  212. invoke-static {}, Lio/reactivex/internal/util/NotificationLite;->complete()Ljava/lang/Object;
  213. move-result-object v1
  214. invoke-virtual {v0, p1, v1}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->offer(Ljava/lang/Object;Ljava/lang/Object;)Z
  215. .line 100
  216. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->drain()V
  217. return-void
  218. .end method
  219. .method public onError(Ljava/lang/Throwable;Lio/reactivex/disposables/Disposable;)V
  220. .locals 1
  221. .line 90
  222. iget-boolean v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  223. if-eqz v0, :cond_0
  224. .line 91
  225. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  226. return-void
  227. .line 94
  228. :cond_0
  229. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  230. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->error(Ljava/lang/Throwable;)Ljava/lang/Object;
  231. move-result-object p1
  232. invoke-virtual {v0, p2, p1}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->offer(Ljava/lang/Object;Ljava/lang/Object;)Z
  233. .line 95
  234. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->drain()V
  235. return-void
  236. .end method
  237. .method public onNext(Ljava/lang/Object;Lio/reactivex/disposables/Disposable;)Z
  238. .locals 1
  239. .annotation system Ldalvik/annotation/Signature;
  240. value = {
  241. "(TT;",
  242. "Lio/reactivex/disposables/Disposable;",
  243. ")Z"
  244. }
  245. .end annotation
  246. .line 80
  247. iget-boolean v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  248. if-eqz v0, :cond_0
  249. const/4 p1, 0x0
  250. return p1
  251. .line 84
  252. :cond_0
  253. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  254. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->next(Ljava/lang/Object;)Ljava/lang/Object;
  255. move-result-object p1
  256. invoke-virtual {v0, p2, p1}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->offer(Ljava/lang/Object;Ljava/lang/Object;)Z
  257. .line 85
  258. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->drain()V
  259. const/4 p1, 0x1
  260. return p1
  261. .end method
  262. .method public setDisposable(Lio/reactivex/disposables/Disposable;)Z
  263. .locals 2
  264. .line 70
  265. iget-boolean v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->cancelled:Z
  266. if-eqz v0, :cond_0
  267. const/4 p1, 0x0
  268. return p1
  269. .line 74
  270. :cond_0
  271. iget-object v0, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->queue:Lio/reactivex/internal/queue/SpscLinkedArrayQueue;
  272. iget-object v1, p0, Lio/reactivex/internal/disposables/ObserverFullArbiter;->s:Lio/reactivex/disposables/Disposable;
  273. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->disposable(Lio/reactivex/disposables/Disposable;)Ljava/lang/Object;
  274. move-result-object p1
  275. invoke-virtual {v0, v1, p1}, Lio/reactivex/internal/queue/SpscLinkedArrayQueue;->offer(Ljava/lang/Object;Ljava/lang/Object;)Z
  276. .line 75
  277. invoke-virtual {p0}, Lio/reactivex/internal/disposables/ObserverFullArbiter;->drain()V
  278. const/4 p1, 0x1
  279. return p1
  280. .end method