ReplaySubject$SizeBoundReplayBuffer.smali 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. .class final Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;
  2. .super Ljava/util/concurrent/atomic/AtomicReference;
  3. .source "ReplaySubject.java"
  4. # interfaces
  5. .implements Lio/reactivex/subjects/ReplaySubject$ReplayBuffer;
  6. # annotations
  7. .annotation system Ldalvik/annotation/EnclosingClass;
  8. value = Lio/reactivex/subjects/ReplaySubject;
  9. .end annotation
  10. .annotation system Ldalvik/annotation/InnerClass;
  11. accessFlags = 0x18
  12. name = "SizeBoundReplayBuffer"
  13. .end annotation
  14. .annotation system Ldalvik/annotation/Signature;
  15. value = {
  16. "<T:",
  17. "Ljava/lang/Object;",
  18. ">",
  19. "Ljava/util/concurrent/atomic/AtomicReference<",
  20. "Ljava/lang/Object;",
  21. ">;",
  22. "Lio/reactivex/subjects/ReplaySubject$ReplayBuffer<",
  23. "TT;>;"
  24. }
  25. .end annotation
  26. # static fields
  27. .field private static final serialVersionUID:J = 0xf5f291fe2c1030bL
  28. # instance fields
  29. .field volatile done:Z
  30. .field volatile head:Lio/reactivex/subjects/ReplaySubject$Node;
  31. .annotation system Ldalvik/annotation/Signature;
  32. value = {
  33. "Lio/reactivex/subjects/ReplaySubject$Node<",
  34. "Ljava/lang/Object;",
  35. ">;"
  36. }
  37. .end annotation
  38. .end field
  39. .field final maxSize:I
  40. .field size:I
  41. .field tail:Lio/reactivex/subjects/ReplaySubject$Node;
  42. .annotation system Ldalvik/annotation/Signature;
  43. value = {
  44. "Lio/reactivex/subjects/ReplaySubject$Node<",
  45. "Ljava/lang/Object;",
  46. ">;"
  47. }
  48. .end annotation
  49. .end field
  50. # direct methods
  51. .method constructor <init>(I)V
  52. .locals 1
  53. .line 725
  54. invoke-direct {p0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
  55. const-string v0, "maxSize"
  56. .line 726
  57. invoke-static {p1, v0}, Lio/reactivex/internal/functions/ObjectHelper;->verifyPositive(ILjava/lang/String;)I
  58. move-result p1
  59. iput p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->maxSize:I
  60. .line 727
  61. new-instance p1, Lio/reactivex/subjects/ReplaySubject$Node;
  62. const/4 v0, 0x0
  63. invoke-direct {p1, v0}, Lio/reactivex/subjects/ReplaySubject$Node;-><init>(Ljava/lang/Object;)V
  64. .line 728
  65. iput-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$Node;
  66. .line 729
  67. iput-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  68. return-void
  69. .end method
  70. # virtual methods
  71. .method public add(Ljava/lang/Object;)V
  72. .locals 2
  73. .annotation system Ldalvik/annotation/Signature;
  74. value = {
  75. "(TT;)V"
  76. }
  77. .end annotation
  78. .line 742
  79. new-instance v0, Lio/reactivex/subjects/ReplaySubject$Node;
  80. invoke-direct {v0, p1}, Lio/reactivex/subjects/ReplaySubject$Node;-><init>(Ljava/lang/Object;)V
  81. .line 743
  82. iget-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$Node;
  83. .line 745
  84. iput-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$Node;
  85. .line 746
  86. iget v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size:I
  87. add-int/lit8 v1, v1, 0x1
  88. iput v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size:I
  89. .line 747
  90. invoke-virtual {p1, v0}, Lio/reactivex/subjects/ReplaySubject$Node;->set(Ljava/lang/Object;)V
  91. .line 749
  92. invoke-virtual {p0}, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->trim()V
  93. return-void
  94. .end method
  95. .method public addFinal(Ljava/lang/Object;)V
  96. .locals 3
  97. .line 754
  98. new-instance v0, Lio/reactivex/subjects/ReplaySubject$Node;
  99. invoke-direct {v0, p1}, Lio/reactivex/subjects/ReplaySubject$Node;-><init>(Ljava/lang/Object;)V
  100. .line 755
  101. iget-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$Node;
  102. .line 757
  103. iput-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$Node;
  104. .line 758
  105. iget v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size:I
  106. const/4 v2, 0x1
  107. add-int/2addr v1, v2
  108. iput v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size:I
  109. .line 759
  110. invoke-virtual {p1, v0}, Lio/reactivex/subjects/ReplaySubject$Node;->lazySet(Ljava/lang/Object;)V
  111. .line 761
  112. iput-boolean v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->done:Z
  113. return-void
  114. .end method
  115. .method public getValue()Ljava/lang/Object;
  116. .locals 4
  117. .annotation system Ldalvik/annotation/Signature;
  118. value = {
  119. "()TT;"
  120. }
  121. .end annotation
  122. .line 768
  123. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  124. const/4 v1, 0x0
  125. move-object v2, v1
  126. .line 771
  127. :goto_0
  128. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  129. move-result-object v3
  130. check-cast v3, Lio/reactivex/subjects/ReplaySubject$Node;
  131. if-nez v3, :cond_3
  132. .line 779
  133. iget-object v0, v0, Lio/reactivex/subjects/ReplaySubject$Node;->value:Ljava/lang/Object;
  134. if-nez v0, :cond_0
  135. return-object v1
  136. .line 783
  137. :cond_0
  138. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  139. move-result v1
  140. if-nez v1, :cond_2
  141. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  142. move-result v1
  143. if-eqz v1, :cond_1
  144. goto :goto_1
  145. :cond_1
  146. return-object v0
  147. .line 784
  148. :cond_2
  149. :goto_1
  150. iget-object v0, v2, Lio/reactivex/subjects/ReplaySubject$Node;->value:Ljava/lang/Object;
  151. return-object v0
  152. :cond_3
  153. move-object v2, v0
  154. move-object v0, v3
  155. goto :goto_0
  156. .end method
  157. .method public getValues([Ljava/lang/Object;)[Ljava/lang/Object;
  158. .locals 5
  159. .annotation system Ldalvik/annotation/Signature;
  160. value = {
  161. "([TT;)[TT;"
  162. }
  163. .end annotation
  164. .line 793
  165. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  166. .line 794
  167. invoke-virtual {p0}, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size()I
  168. move-result v1
  169. const/4 v2, 0x0
  170. const/4 v3, 0x0
  171. if-nez v1, :cond_0
  172. .line 797
  173. array-length v0, p1
  174. if-eqz v0, :cond_3
  175. .line 798
  176. aput-object v2, p1, v3
  177. goto :goto_1
  178. .line 801
  179. :cond_0
  180. array-length v4, p1
  181. if-ge v4, v1, :cond_1
  182. .line 802
  183. invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
  184. move-result-object p1
  185. invoke-virtual {p1}, Ljava/lang/Class;->getComponentType()Ljava/lang/Class;
  186. move-result-object p1
  187. invoke-static {p1, v1}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;I)Ljava/lang/Object;
  188. move-result-object p1
  189. check-cast p1, [Ljava/lang/Object;
  190. check-cast p1, [Ljava/lang/Object;
  191. :cond_1
  192. :goto_0
  193. if-eq v3, v1, :cond_2
  194. .line 807
  195. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  196. move-result-object v0
  197. check-cast v0, Lio/reactivex/subjects/ReplaySubject$Node;
  198. .line 808
  199. iget-object v4, v0, Lio/reactivex/subjects/ReplaySubject$Node;->value:Ljava/lang/Object;
  200. aput-object v4, p1, v3
  201. add-int/lit8 v3, v3, 0x1
  202. goto :goto_0
  203. .line 812
  204. :cond_2
  205. array-length v0, p1
  206. if-le v0, v1, :cond_3
  207. .line 813
  208. aput-object v2, p1, v1
  209. :cond_3
  210. :goto_1
  211. return-object p1
  212. .end method
  213. .method public replay(Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;)V
  214. .locals 7
  215. .annotation system Ldalvik/annotation/Signature;
  216. value = {
  217. "(",
  218. "Lio/reactivex/subjects/ReplaySubject$ReplayDisposable<",
  219. "TT;>;)V"
  220. }
  221. .end annotation
  222. .line 823
  223. invoke-virtual {p1}, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->getAndIncrement()I
  224. move-result v0
  225. if-eqz v0, :cond_0
  226. return-void
  227. .line 828
  228. :cond_0
  229. iget-object v0, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->actual:Lio/reactivex/Observer;
  230. .line 830
  231. iget-object v1, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  232. check-cast v1, Lio/reactivex/subjects/ReplaySubject$Node;
  233. const/4 v2, 0x1
  234. if-nez v1, :cond_1
  235. .line 832
  236. iget-object v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  237. :cond_1
  238. const/4 v3, 0x1
  239. .line 838
  240. :cond_2
  241. :goto_0
  242. iget-boolean v4, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->cancelled:Z
  243. const/4 v5, 0x0
  244. if-eqz v4, :cond_3
  245. .line 839
  246. iput-object v5, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  247. return-void
  248. .line 843
  249. :cond_3
  250. invoke-virtual {v1}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  251. move-result-object v4
  252. check-cast v4, Lio/reactivex/subjects/ReplaySubject$Node;
  253. if-nez v4, :cond_5
  254. .line 870
  255. invoke-virtual {v1}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  256. move-result-object v4
  257. if-eqz v4, :cond_4
  258. goto :goto_0
  259. .line 874
  260. :cond_4
  261. iput-object v1, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  262. neg-int v3, v3
  263. .line 876
  264. invoke-virtual {p1, v3}, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->addAndGet(I)I
  265. move-result v3
  266. if-nez v3, :cond_2
  267. return-void
  268. .line 849
  269. :cond_5
  270. iget-object v1, v4, Lio/reactivex/subjects/ReplaySubject$Node;->value:Ljava/lang/Object;
  271. .line 851
  272. iget-boolean v6, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->done:Z
  273. if-eqz v6, :cond_7
  274. .line 852
  275. invoke-virtual {v4}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  276. move-result-object v6
  277. if-nez v6, :cond_7
  278. .line 854
  279. invoke-static {v1}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  280. move-result v3
  281. if-eqz v3, :cond_6
  282. .line 855
  283. invoke-interface {v0}, Lio/reactivex/Observer;->onComplete()V
  284. goto :goto_1
  285. .line 857
  286. :cond_6
  287. invoke-static {v1}, Lio/reactivex/internal/util/NotificationLite;->getError(Ljava/lang/Object;)Ljava/lang/Throwable;
  288. move-result-object v1
  289. invoke-interface {v0, v1}, Lio/reactivex/Observer;->onError(Ljava/lang/Throwable;)V
  290. .line 859
  291. :goto_1
  292. iput-object v5, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  293. .line 860
  294. iput-boolean v2, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->cancelled:Z
  295. return-void
  296. .line 865
  297. :cond_7
  298. invoke-interface {v0, v1}, Lio/reactivex/Observer;->onNext(Ljava/lang/Object;)V
  299. move-object v1, v4
  300. goto :goto_0
  301. .end method
  302. .method public size()I
  303. .locals 3
  304. .line 886
  305. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  306. const/4 v1, 0x0
  307. :goto_0
  308. const v2, 0x7fffffff
  309. if-eq v1, v2, :cond_2
  310. .line 888
  311. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  312. move-result-object v2
  313. check-cast v2, Lio/reactivex/subjects/ReplaySubject$Node;
  314. if-nez v2, :cond_1
  315. .line 890
  316. iget-object v0, v0, Lio/reactivex/subjects/ReplaySubject$Node;->value:Ljava/lang/Object;
  317. .line 891
  318. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  319. move-result v2
  320. if-nez v2, :cond_0
  321. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  322. move-result v0
  323. if-eqz v0, :cond_2
  324. :cond_0
  325. add-int/lit8 v1, v1, -0x1
  326. goto :goto_1
  327. :cond_1
  328. add-int/lit8 v1, v1, 0x1
  329. move-object v0, v2
  330. goto :goto_0
  331. :cond_2
  332. :goto_1
  333. return v1
  334. .end method
  335. .method trim()V
  336. .locals 2
  337. .line 733
  338. iget v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size:I
  339. iget v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->maxSize:I
  340. if-le v0, v1, :cond_0
  341. add-int/lit8 v0, v0, -0x1
  342. .line 734
  343. iput v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->size:I
  344. .line 735
  345. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  346. .line 736
  347. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$Node;->get()Ljava/lang/Object;
  348. move-result-object v0
  349. check-cast v0, Lio/reactivex/subjects/ReplaySubject$Node;
  350. iput-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$Node;
  351. :cond_0
  352. return-void
  353. .end method