ReplaySubject$SizeAndTimeBoundReplayBuffer.smali 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. .class final Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;
  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 = "SizeAndTimeBoundReplayBuffer"
  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 = -0x6fcd9699e42b76b5L
  28. # instance fields
  29. .field volatile done:Z
  30. .field volatile head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  31. .annotation system Ldalvik/annotation/Signature;
  32. value = {
  33. "Lio/reactivex/subjects/ReplaySubject$TimedNode<",
  34. "Ljava/lang/Object;",
  35. ">;"
  36. }
  37. .end annotation
  38. .end field
  39. .field final maxAge:J
  40. .field final maxSize:I
  41. .field final scheduler:Lio/reactivex/Scheduler;
  42. .field size:I
  43. .field tail:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  44. .annotation system Ldalvik/annotation/Signature;
  45. value = {
  46. "Lio/reactivex/subjects/ReplaySubject$TimedNode<",
  47. "Ljava/lang/Object;",
  48. ">;"
  49. }
  50. .end annotation
  51. .end field
  52. .field final unit:Ljava/util/concurrent/TimeUnit;
  53. # direct methods
  54. .method constructor <init>(IJLjava/util/concurrent/TimeUnit;Lio/reactivex/Scheduler;)V
  55. .locals 1
  56. .line 923
  57. invoke-direct {p0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
  58. const-string v0, "maxSize"
  59. .line 924
  60. invoke-static {p1, v0}, Lio/reactivex/internal/functions/ObjectHelper;->verifyPositive(ILjava/lang/String;)I
  61. move-result p1
  62. iput p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->maxSize:I
  63. const-string p1, "maxAge"
  64. .line 925
  65. invoke-static {p2, p3, p1}, Lio/reactivex/internal/functions/ObjectHelper;->verifyPositive(JLjava/lang/String;)J
  66. move-result-wide p1
  67. iput-wide p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->maxAge:J
  68. const-string p1, "unit is null"
  69. .line 926
  70. invoke-static {p4, p1}, Lio/reactivex/internal/functions/ObjectHelper;->requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
  71. move-result-object p1
  72. check-cast p1, Ljava/util/concurrent/TimeUnit;
  73. iput-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->unit:Ljava/util/concurrent/TimeUnit;
  74. const-string p1, "scheduler is null"
  75. .line 927
  76. invoke-static {p5, p1}, Lio/reactivex/internal/functions/ObjectHelper;->requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
  77. move-result-object p1
  78. check-cast p1, Lio/reactivex/Scheduler;
  79. iput-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->scheduler:Lio/reactivex/Scheduler;
  80. .line 928
  81. new-instance p1, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  82. const/4 p2, 0x0
  83. const-wide/16 p3, 0x0
  84. invoke-direct {p1, p2, p3, p4}, Lio/reactivex/subjects/ReplaySubject$TimedNode;-><init>(Ljava/lang/Object;J)V
  85. .line 929
  86. iput-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  87. .line 930
  88. iput-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  89. return-void
  90. .end method
  91. # virtual methods
  92. .method public add(Ljava/lang/Object;)V
  93. .locals 3
  94. .annotation system Ldalvik/annotation/Signature;
  95. value = {
  96. "(TT;)V"
  97. }
  98. .end annotation
  99. .line 983
  100. new-instance v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  101. iget-object v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->scheduler:Lio/reactivex/Scheduler;
  102. iget-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->unit:Ljava/util/concurrent/TimeUnit;
  103. invoke-virtual {v1, v2}, Lio/reactivex/Scheduler;->now(Ljava/util/concurrent/TimeUnit;)J
  104. move-result-wide v1
  105. invoke-direct {v0, p1, v1, v2}, Lio/reactivex/subjects/ReplaySubject$TimedNode;-><init>(Ljava/lang/Object;J)V
  106. .line 984
  107. iget-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  108. .line 986
  109. iput-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  110. .line 987
  111. iget v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size:I
  112. add-int/lit8 v1, v1, 0x1
  113. iput v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size:I
  114. .line 988
  115. invoke-virtual {p1, v0}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->set(Ljava/lang/Object;)V
  116. .line 990
  117. invoke-virtual {p0}, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->trim()V
  118. return-void
  119. .end method
  120. .method public addFinal(Ljava/lang/Object;)V
  121. .locals 3
  122. .line 995
  123. new-instance v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  124. const-wide v1, 0x7fffffffffffffffL
  125. invoke-direct {v0, p1, v1, v2}, Lio/reactivex/subjects/ReplaySubject$TimedNode;-><init>(Ljava/lang/Object;J)V
  126. .line 996
  127. iget-object p1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  128. .line 998
  129. iput-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->tail:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  130. .line 999
  131. iget v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size:I
  132. const/4 v2, 0x1
  133. add-int/2addr v1, v2
  134. iput v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size:I
  135. .line 1000
  136. invoke-virtual {p1, v0}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->lazySet(Ljava/lang/Object;)V
  137. .line 1001
  138. invoke-virtual {p0}, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->trimFinal()V
  139. .line 1003
  140. iput-boolean v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->done:Z
  141. return-void
  142. .end method
  143. .method public getValue()Ljava/lang/Object;
  144. .locals 4
  145. .annotation system Ldalvik/annotation/Signature;
  146. value = {
  147. "()TT;"
  148. }
  149. .end annotation
  150. .line 1010
  151. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  152. const/4 v1, 0x0
  153. move-object v2, v1
  154. .line 1013
  155. :goto_0
  156. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  157. move-result-object v3
  158. check-cast v3, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  159. if-nez v3, :cond_3
  160. .line 1021
  161. iget-object v0, v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;->value:Ljava/lang/Object;
  162. if-nez v0, :cond_0
  163. return-object v1
  164. .line 1025
  165. :cond_0
  166. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  167. move-result v1
  168. if-nez v1, :cond_2
  169. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  170. move-result v1
  171. if-eqz v1, :cond_1
  172. goto :goto_1
  173. :cond_1
  174. return-object v0
  175. .line 1026
  176. :cond_2
  177. :goto_1
  178. iget-object v0, v2, Lio/reactivex/subjects/ReplaySubject$TimedNode;->value:Ljava/lang/Object;
  179. return-object v0
  180. :cond_3
  181. move-object v2, v0
  182. move-object v0, v3
  183. goto :goto_0
  184. .end method
  185. .method public getValues([Ljava/lang/Object;)[Ljava/lang/Object;
  186. .locals 5
  187. .annotation system Ldalvik/annotation/Signature;
  188. value = {
  189. "([TT;)[TT;"
  190. }
  191. .end annotation
  192. .line 1035
  193. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  194. .line 1036
  195. invoke-virtual {p0}, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size()I
  196. move-result v1
  197. const/4 v2, 0x0
  198. const/4 v3, 0x0
  199. if-nez v1, :cond_0
  200. .line 1039
  201. array-length v0, p1
  202. if-eqz v0, :cond_3
  203. .line 1040
  204. aput-object v2, p1, v3
  205. goto :goto_1
  206. .line 1043
  207. :cond_0
  208. array-length v4, p1
  209. if-ge v4, v1, :cond_1
  210. .line 1044
  211. invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
  212. move-result-object p1
  213. invoke-virtual {p1}, Ljava/lang/Class;->getComponentType()Ljava/lang/Class;
  214. move-result-object p1
  215. invoke-static {p1, v1}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;I)Ljava/lang/Object;
  216. move-result-object p1
  217. check-cast p1, [Ljava/lang/Object;
  218. check-cast p1, [Ljava/lang/Object;
  219. :cond_1
  220. :goto_0
  221. if-eq v3, v1, :cond_2
  222. .line 1049
  223. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  224. move-result-object v0
  225. check-cast v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  226. .line 1050
  227. iget-object v4, v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;->value:Ljava/lang/Object;
  228. aput-object v4, p1, v3
  229. add-int/lit8 v3, v3, 0x1
  230. goto :goto_0
  231. .line 1054
  232. :cond_2
  233. array-length v0, p1
  234. if-le v0, v1, :cond_3
  235. .line 1055
  236. aput-object v2, p1, v1
  237. :cond_3
  238. :goto_1
  239. return-object p1
  240. .end method
  241. .method public replay(Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;)V
  242. .locals 10
  243. .annotation system Ldalvik/annotation/Signature;
  244. value = {
  245. "(",
  246. "Lio/reactivex/subjects/ReplaySubject$ReplayDisposable<",
  247. "TT;>;)V"
  248. }
  249. .end annotation
  250. .line 1065
  251. invoke-virtual {p1}, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->getAndIncrement()I
  252. move-result v0
  253. if-eqz v0, :cond_0
  254. return-void
  255. .line 1070
  256. :cond_0
  257. iget-object v0, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->actual:Lio/reactivex/Observer;
  258. .line 1072
  259. iget-object v1, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  260. check-cast v1, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  261. const/4 v2, 0x1
  262. if-nez v1, :cond_2
  263. .line 1074
  264. iget-object v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  265. .line 1075
  266. iget-boolean v3, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->done:Z
  267. if-nez v3, :cond_2
  268. .line 1077
  269. iget-object v3, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->scheduler:Lio/reactivex/Scheduler;
  270. iget-object v4, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->unit:Ljava/util/concurrent/TimeUnit;
  271. invoke-virtual {v3, v4}, Lio/reactivex/Scheduler;->now(Ljava/util/concurrent/TimeUnit;)J
  272. move-result-wide v3
  273. iget-wide v5, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->maxAge:J
  274. sub-long/2addr v3, v5
  275. .line 1078
  276. invoke-virtual {v1}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  277. move-result-object v5
  278. check-cast v5, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  279. :goto_0
  280. if-eqz v5, :cond_2
  281. .line 1080
  282. iget-wide v6, v5, Lio/reactivex/subjects/ReplaySubject$TimedNode;->time:J
  283. cmp-long v8, v6, v3
  284. if-lez v8, :cond_1
  285. goto :goto_1
  286. .line 1085
  287. :cond_1
  288. invoke-virtual {v5}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  289. move-result-object v1
  290. check-cast v1, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  291. move-object v9, v5
  292. move-object v5, v1
  293. move-object v1, v9
  294. goto :goto_0
  295. :cond_2
  296. :goto_1
  297. const/4 v3, 0x1
  298. .line 1092
  299. :cond_3
  300. :goto_2
  301. iget-boolean v4, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->cancelled:Z
  302. const/4 v5, 0x0
  303. if-eqz v4, :cond_4
  304. .line 1093
  305. iput-object v5, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  306. return-void
  307. .line 1098
  308. :cond_4
  309. :goto_3
  310. iget-boolean v4, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->cancelled:Z
  311. if-eqz v4, :cond_5
  312. .line 1099
  313. iput-object v5, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  314. return-void
  315. .line 1103
  316. :cond_5
  317. invoke-virtual {v1}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  318. move-result-object v4
  319. check-cast v4, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  320. if-nez v4, :cond_7
  321. .line 1130
  322. invoke-virtual {v1}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  323. move-result-object v4
  324. if-eqz v4, :cond_6
  325. goto :goto_2
  326. .line 1134
  327. :cond_6
  328. iput-object v1, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  329. neg-int v3, v3
  330. .line 1136
  331. invoke-virtual {p1, v3}, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->addAndGet(I)I
  332. move-result v3
  333. if-nez v3, :cond_3
  334. return-void
  335. .line 1109
  336. :cond_7
  337. iget-object v1, v4, Lio/reactivex/subjects/ReplaySubject$TimedNode;->value:Ljava/lang/Object;
  338. .line 1111
  339. iget-boolean v6, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->done:Z
  340. if-eqz v6, :cond_9
  341. .line 1112
  342. invoke-virtual {v4}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  343. move-result-object v6
  344. if-nez v6, :cond_9
  345. .line 1114
  346. invoke-static {v1}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  347. move-result v3
  348. if-eqz v3, :cond_8
  349. .line 1115
  350. invoke-interface {v0}, Lio/reactivex/Observer;->onComplete()V
  351. goto :goto_4
  352. .line 1117
  353. :cond_8
  354. invoke-static {v1}, Lio/reactivex/internal/util/NotificationLite;->getError(Ljava/lang/Object;)Ljava/lang/Throwable;
  355. move-result-object v1
  356. invoke-interface {v0, v1}, Lio/reactivex/Observer;->onError(Ljava/lang/Throwable;)V
  357. .line 1119
  358. :goto_4
  359. iput-object v5, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->index:Ljava/lang/Object;
  360. .line 1120
  361. iput-boolean v2, p1, Lio/reactivex/subjects/ReplaySubject$ReplayDisposable;->cancelled:Z
  362. return-void
  363. .line 1125
  364. :cond_9
  365. invoke-interface {v0, v1}, Lio/reactivex/Observer;->onNext(Ljava/lang/Object;)V
  366. move-object v1, v4
  367. goto :goto_3
  368. .end method
  369. .method public size()I
  370. .locals 3
  371. .line 1146
  372. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  373. const/4 v1, 0x0
  374. :goto_0
  375. const v2, 0x7fffffff
  376. if-eq v1, v2, :cond_2
  377. .line 1148
  378. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  379. move-result-object v2
  380. check-cast v2, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  381. if-nez v2, :cond_1
  382. .line 1150
  383. iget-object v0, v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;->value:Ljava/lang/Object;
  384. .line 1151
  385. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  386. move-result v2
  387. if-nez v2, :cond_0
  388. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  389. move-result v0
  390. if-eqz v0, :cond_2
  391. :cond_0
  392. add-int/lit8 v1, v1, -0x1
  393. goto :goto_1
  394. :cond_1
  395. add-int/lit8 v1, v1, 0x1
  396. move-object v0, v2
  397. goto :goto_0
  398. :cond_2
  399. :goto_1
  400. return v1
  401. .end method
  402. .method trim()V
  403. .locals 7
  404. .line 934
  405. iget v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size:I
  406. iget v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->maxSize:I
  407. if-le v0, v1, :cond_0
  408. add-int/lit8 v0, v0, -0x1
  409. .line 935
  410. iput v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->size:I
  411. .line 936
  412. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  413. .line 937
  414. invoke-virtual {v0}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  415. move-result-object v0
  416. check-cast v0, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  417. iput-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  418. .line 939
  419. :cond_0
  420. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->scheduler:Lio/reactivex/Scheduler;
  421. iget-object v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->unit:Ljava/util/concurrent/TimeUnit;
  422. invoke-virtual {v0, v1}, Lio/reactivex/Scheduler;->now(Ljava/util/concurrent/TimeUnit;)J
  423. move-result-wide v0
  424. iget-wide v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->maxAge:J
  425. sub-long/2addr v0, v2
  426. .line 941
  427. iget-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  428. .line 944
  429. :goto_0
  430. invoke-virtual {v2}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  431. move-result-object v3
  432. check-cast v3, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  433. if-nez v3, :cond_1
  434. .line 946
  435. iput-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  436. goto :goto_1
  437. .line 950
  438. :cond_1
  439. iget-wide v4, v3, Lio/reactivex/subjects/ReplaySubject$TimedNode;->time:J
  440. cmp-long v6, v4, v0
  441. if-lez v6, :cond_2
  442. .line 951
  443. iput-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  444. :goto_1
  445. return-void
  446. :cond_2
  447. move-object v2, v3
  448. goto :goto_0
  449. .end method
  450. .method trimFinal()V
  451. .locals 7
  452. .line 961
  453. iget-object v0, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->scheduler:Lio/reactivex/Scheduler;
  454. iget-object v1, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->unit:Ljava/util/concurrent/TimeUnit;
  455. invoke-virtual {v0, v1}, Lio/reactivex/Scheduler;->now(Ljava/util/concurrent/TimeUnit;)J
  456. move-result-wide v0
  457. iget-wide v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->maxAge:J
  458. sub-long/2addr v0, v2
  459. .line 963
  460. iget-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  461. .line 966
  462. :goto_0
  463. invoke-virtual {v2}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  464. move-result-object v3
  465. check-cast v3, Lio/reactivex/subjects/ReplaySubject$TimedNode;
  466. .line 967
  467. invoke-virtual {v3}, Lio/reactivex/subjects/ReplaySubject$TimedNode;->get()Ljava/lang/Object;
  468. move-result-object v4
  469. if-nez v4, :cond_0
  470. .line 968
  471. iput-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  472. goto :goto_1
  473. .line 972
  474. :cond_0
  475. iget-wide v4, v3, Lio/reactivex/subjects/ReplaySubject$TimedNode;->time:J
  476. cmp-long v6, v4, v0
  477. if-lez v6, :cond_1
  478. .line 973
  479. iput-object v2, p0, Lio/reactivex/subjects/ReplaySubject$SizeAndTimeBoundReplayBuffer;->head:Lio/reactivex/subjects/ReplaySubject$TimedNode;
  480. :goto_1
  481. return-void
  482. :cond_1
  483. move-object v2, v3
  484. goto :goto_0
  485. .end method