CircularIntArray.smali 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. .class public final Landroid/support/v4/util/CircularIntArray;
  2. .super Ljava/lang/Object;
  3. .source "CircularIntArray.java"
  4. # instance fields
  5. .field private mCapacityBitmask:I
  6. .field private mElements:[I
  7. .field private mHead:I
  8. .field private mTail:I
  9. # direct methods
  10. .method public constructor <init>()V
  11. .locals 1
  12. .prologue
  13. .line 48
  14. const/16 v0, 0x8
  15. invoke-direct {p0, v0}, Landroid/support/v4/util/CircularIntArray;-><init>(I)V
  16. .line 49
  17. return-void
  18. .end method
  19. .method public constructor <init>(I)V
  20. .locals 3
  21. .param p1, "minCapacity" # I
  22. .prologue
  23. const/4 v2, 0x1
  24. .line 57
  25. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  26. .line 58
  27. if-ge p1, v2, :cond_0
  28. .line 59
  29. new-instance v1, Ljava/lang/IllegalArgumentException;
  30. const-string v2, "capacity must be >= 1"
  31. invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  32. throw v1
  33. .line 61
  34. :cond_0
  35. const/high16 v1, 0x40000000 # 2.0f
  36. if-le p1, v1, :cond_1
  37. .line 62
  38. new-instance v1, Ljava/lang/IllegalArgumentException;
  39. const-string v2, "capacity must be <= 2^30"
  40. invoke-direct {v1, v2}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  41. throw v1
  42. .line 68
  43. :cond_1
  44. invoke-static {p1}, Ljava/lang/Integer;->bitCount(I)I
  45. move-result v1
  46. if-eq v1, v2, :cond_2
  47. .line 69
  48. add-int/lit8 v1, p1, -0x1
  49. invoke-static {v1}, Ljava/lang/Integer;->highestOneBit(I)I
  50. move-result v1
  51. shl-int/lit8 v0, v1, 0x1
  52. .line 74
  53. .local v0, "arrayCapacity":I
  54. :goto_0
  55. add-int/lit8 v1, v0, -0x1
  56. iput v1, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  57. .line 75
  58. new-array v1, v0, [I
  59. iput-object v1, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  60. .line 76
  61. return-void
  62. .line 71
  63. .end local v0 # "arrayCapacity":I
  64. :cond_2
  65. move v0, p1
  66. .restart local v0 # "arrayCapacity":I
  67. goto :goto_0
  68. .end method
  69. .method private doubleCapacity()V
  70. .locals 7
  71. .prologue
  72. const/4 v6, 0x0
  73. .line 29
  74. iget-object v4, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  75. array-length v1, v4
  76. .line 30
  77. .local v1, "n":I
  78. iget v4, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  79. sub-int v3, v1, v4
  80. .line 31
  81. .local v3, "r":I
  82. shl-int/lit8 v2, v1, 0x1
  83. .line 32
  84. .local v2, "newCapacity":I
  85. if-gez v2, :cond_0
  86. .line 33
  87. new-instance v4, Ljava/lang/RuntimeException;
  88. const-string v5, "Max array capacity exceeded"
  89. invoke-direct {v4, v5}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
  90. throw v4
  91. .line 35
  92. :cond_0
  93. new-array v0, v2, [I
  94. .line 36
  95. .local v0, "a":[I
  96. iget-object v4, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  97. iget v5, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  98. invoke-static {v4, v5, v0, v6, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  99. .line 37
  100. iget-object v4, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  101. iget v5, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  102. invoke-static {v4, v6, v0, v3, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  103. .line 38
  104. iput-object v0, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  105. .line 39
  106. iput v6, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  107. .line 40
  108. iput v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  109. .line 41
  110. add-int/lit8 v4, v2, -0x1
  111. iput v4, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  112. .line 42
  113. return-void
  114. .end method
  115. # virtual methods
  116. .method public addFirst(I)V
  117. .locals 2
  118. .param p1, "e" # I
  119. .prologue
  120. .line 83
  121. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  122. add-int/lit8 v0, v0, -0x1
  123. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  124. and-int/2addr v0, v1
  125. iput v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  126. .line 84
  127. iget-object v0, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  128. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  129. aput p1, v0, v1
  130. .line 85
  131. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  132. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  133. if-ne v0, v1, :cond_0
  134. .line 86
  135. invoke-direct {p0}, Landroid/support/v4/util/CircularIntArray;->doubleCapacity()V
  136. .line 88
  137. :cond_0
  138. return-void
  139. .end method
  140. .method public addLast(I)V
  141. .locals 2
  142. .param p1, "e" # I
  143. .prologue
  144. .line 95
  145. iget-object v0, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  146. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  147. aput p1, v0, v1
  148. .line 96
  149. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  150. add-int/lit8 v0, v0, 0x1
  151. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  152. and-int/2addr v0, v1
  153. iput v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  154. .line 97
  155. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  156. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  157. if-ne v0, v1, :cond_0
  158. .line 98
  159. invoke-direct {p0}, Landroid/support/v4/util/CircularIntArray;->doubleCapacity()V
  160. .line 100
  161. :cond_0
  162. return-void
  163. .end method
  164. .method public clear()V
  165. .locals 1
  166. .prologue
  167. .line 131
  168. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  169. iput v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  170. .line 132
  171. return-void
  172. .end method
  173. .method public get(I)I
  174. .locals 3
  175. .param p1, "n" # I
  176. .prologue
  177. .line 195
  178. if-ltz p1, :cond_0
  179. invoke-virtual {p0}, Landroid/support/v4/util/CircularIntArray;->size()I
  180. move-result v0
  181. if-lt p1, v0, :cond_1
  182. :cond_0
  183. new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
  184. invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  185. throw v0
  186. .line 196
  187. :cond_1
  188. iget-object v0, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  189. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  190. add-int/2addr v1, p1
  191. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  192. and-int/2addr v1, v2
  193. aget v0, v0, v1
  194. return v0
  195. .end method
  196. .method public getFirst()I
  197. .locals 2
  198. .prologue
  199. .line 174
  200. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  201. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  202. if-ne v0, v1, :cond_0
  203. new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
  204. invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  205. throw v0
  206. .line 175
  207. :cond_0
  208. iget-object v0, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  209. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  210. aget v0, v0, v1
  211. return v0
  212. .end method
  213. .method public getLast()I
  214. .locals 3
  215. .prologue
  216. .line 184
  217. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  218. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  219. if-ne v0, v1, :cond_0
  220. new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
  221. invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  222. throw v0
  223. .line 185
  224. :cond_0
  225. iget-object v0, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  226. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  227. add-int/lit8 v1, v1, -0x1
  228. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  229. and-int/2addr v1, v2
  230. aget v0, v0, v1
  231. return v0
  232. .end method
  233. .method public isEmpty()Z
  234. .locals 2
  235. .prologue
  236. .line 212
  237. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  238. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  239. if-ne v0, v1, :cond_0
  240. const/4 v0, 0x1
  241. :goto_0
  242. return v0
  243. :cond_0
  244. const/4 v0, 0x0
  245. goto :goto_0
  246. .end method
  247. .method public popFirst()I
  248. .locals 3
  249. .prologue
  250. .line 108
  251. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  252. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  253. if-ne v1, v2, :cond_0
  254. new-instance v1, Ljava/lang/ArrayIndexOutOfBoundsException;
  255. invoke-direct {v1}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  256. throw v1
  257. .line 109
  258. :cond_0
  259. iget-object v1, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  260. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  261. aget v0, v1, v2
  262. .line 110
  263. .local v0, "result":I
  264. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  265. add-int/lit8 v1, v1, 0x1
  266. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  267. and-int/2addr v1, v2
  268. iput v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  269. .line 111
  270. return v0
  271. .end method
  272. .method public popLast()I
  273. .locals 4
  274. .prologue
  275. .line 120
  276. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  277. iget v3, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  278. if-ne v2, v3, :cond_0
  279. new-instance v2, Ljava/lang/ArrayIndexOutOfBoundsException;
  280. invoke-direct {v2}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  281. throw v2
  282. .line 121
  283. :cond_0
  284. iget v2, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  285. add-int/lit8 v2, v2, -0x1
  286. iget v3, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  287. and-int v1, v2, v3
  288. .line 122
  289. .local v1, "t":I
  290. iget-object v2, p0, Landroid/support/v4/util/CircularIntArray;->mElements:[I
  291. aget v0, v2, v1
  292. .line 123
  293. .local v0, "result":I
  294. iput v1, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  295. .line 124
  296. return v0
  297. .end method
  298. .method public removeFromEnd(I)V
  299. .locals 2
  300. .param p1, "numOfElements" # I
  301. .prologue
  302. .line 159
  303. if-gtz p1, :cond_0
  304. .line 166
  305. :goto_0
  306. return-void
  307. .line 162
  308. :cond_0
  309. invoke-virtual {p0}, Landroid/support/v4/util/CircularIntArray;->size()I
  310. move-result v0
  311. if-le p1, v0, :cond_1
  312. .line 163
  313. new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
  314. invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  315. throw v0
  316. .line 165
  317. :cond_1
  318. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  319. sub-int/2addr v0, p1
  320. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  321. and-int/2addr v0, v1
  322. iput v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  323. goto :goto_0
  324. .end method
  325. .method public removeFromStart(I)V
  326. .locals 2
  327. .param p1, "numOfElements" # I
  328. .prologue
  329. .line 142
  330. if-gtz p1, :cond_0
  331. .line 149
  332. :goto_0
  333. return-void
  334. .line 145
  335. :cond_0
  336. invoke-virtual {p0}, Landroid/support/v4/util/CircularIntArray;->size()I
  337. move-result v0
  338. if-le p1, v0, :cond_1
  339. .line 146
  340. new-instance v0, Ljava/lang/ArrayIndexOutOfBoundsException;
  341. invoke-direct {v0}, Ljava/lang/ArrayIndexOutOfBoundsException;-><init>()V
  342. throw v0
  343. .line 148
  344. :cond_1
  345. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  346. add-int/2addr v0, p1
  347. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  348. and-int/2addr v0, v1
  349. iput v0, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  350. goto :goto_0
  351. .end method
  352. .method public size()I
  353. .locals 2
  354. .prologue
  355. .line 204
  356. iget v0, p0, Landroid/support/v4/util/CircularIntArray;->mTail:I
  357. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mHead:I
  358. sub-int/2addr v0, v1
  359. iget v1, p0, Landroid/support/v4/util/CircularIntArray;->mCapacityBitmask:I
  360. and-int/2addr v0, v1
  361. return v0
  362. .end method