OpenHashSet.smali 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. .class public final Lio/reactivex/internal/util/OpenHashSet;
  2. .super Ljava/lang/Object;
  3. .source "OpenHashSet.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/Signature;
  6. value = {
  7. "<T:",
  8. "Ljava/lang/Object;",
  9. ">",
  10. "Ljava/lang/Object;"
  11. }
  12. .end annotation
  13. # static fields
  14. .field private static final INT_PHI:I = -0x61c88647
  15. # instance fields
  16. .field keys:[Ljava/lang/Object;
  17. .annotation system Ldalvik/annotation/Signature;
  18. value = {
  19. "[TT;"
  20. }
  21. .end annotation
  22. .end field
  23. .field final loadFactor:F
  24. .field mask:I
  25. .field maxSize:I
  26. .field size:I
  27. # direct methods
  28. .method public constructor <init>()V
  29. .locals 2
  30. const/16 v0, 0x10
  31. const/high16 v1, 0x3f400000 # 0.75f
  32. .line 37
  33. invoke-direct {p0, v0, v1}, Lio/reactivex/internal/util/OpenHashSet;-><init>(IF)V
  34. return-void
  35. .end method
  36. .method public constructor <init>(I)V
  37. .locals 1
  38. const/high16 v0, 0x3f400000 # 0.75f
  39. .line 45
  40. invoke-direct {p0, p1, v0}, Lio/reactivex/internal/util/OpenHashSet;-><init>(IF)V
  41. return-void
  42. .end method
  43. .method public constructor <init>(IF)V
  44. .locals 1
  45. .line 49
  46. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  47. .line 50
  48. iput p2, p0, Lio/reactivex/internal/util/OpenHashSet;->loadFactor:F
  49. .line 51
  50. invoke-static {p1}, Lio/reactivex/internal/util/Pow2;->roundToPowerOfTwo(I)I
  51. move-result p1
  52. add-int/lit8 v0, p1, -0x1
  53. .line 52
  54. iput v0, p0, Lio/reactivex/internal/util/OpenHashSet;->mask:I
  55. int-to-float v0, p1
  56. mul-float p2, p2, v0
  57. float-to-int p2, p2
  58. .line 53
  59. iput p2, p0, Lio/reactivex/internal/util/OpenHashSet;->maxSize:I
  60. .line 54
  61. new-array p1, p1, [Ljava/lang/Object;
  62. check-cast p1, [Ljava/lang/Object;
  63. iput-object p1, p0, Lio/reactivex/internal/util/OpenHashSet;->keys:[Ljava/lang/Object;
  64. return-void
  65. .end method
  66. .method static mix(I)I
  67. .locals 1
  68. const v0, -0x61c88647
  69. mul-int p0, p0, v0
  70. ushr-int/lit8 v0, p0, 0x10
  71. xor-int/2addr p0, v0
  72. return p0
  73. .end method
  74. # virtual methods
  75. .method public add(Ljava/lang/Object;)Z
  76. .locals 6
  77. .annotation system Ldalvik/annotation/Signature;
  78. value = {
  79. "(TT;)Z"
  80. }
  81. .end annotation
  82. .line 58
  83. iget-object v0, p0, Lio/reactivex/internal/util/OpenHashSet;->keys:[Ljava/lang/Object;
  84. .line 59
  85. iget v1, p0, Lio/reactivex/internal/util/OpenHashSet;->mask:I
  86. .line 61
  87. invoke-virtual {p1}, Ljava/lang/Object;->hashCode()I
  88. move-result v2
  89. invoke-static {v2}, Lio/reactivex/internal/util/OpenHashSet;->mix(I)I
  90. move-result v2
  91. and-int/2addr v2, v1
  92. .line 62
  93. aget-object v3, v0, v2
  94. const/4 v4, 0x1
  95. if-eqz v3, :cond_2
  96. .line 64
  97. invoke-virtual {v3, p1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
  98. move-result v3
  99. const/4 v5, 0x0
  100. if-eqz v3, :cond_0
  101. return v5
  102. :cond_0
  103. add-int/2addr v2, v4
  104. and-int/2addr v2, v1
  105. .line 69
  106. aget-object v3, v0, v2
  107. if-nez v3, :cond_1
  108. goto :goto_0
  109. .line 73
  110. :cond_1
  111. invoke-virtual {v3, p1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
  112. move-result v3
  113. if-eqz v3, :cond_0
  114. return v5
  115. .line 78
  116. :cond_2
  117. :goto_0
  118. aput-object p1, v0, v2
  119. .line 79
  120. iget p1, p0, Lio/reactivex/internal/util/OpenHashSet;->size:I
  121. add-int/2addr p1, v4
  122. iput p1, p0, Lio/reactivex/internal/util/OpenHashSet;->size:I
  123. iget v0, p0, Lio/reactivex/internal/util/OpenHashSet;->maxSize:I
  124. if-lt p1, v0, :cond_3
  125. .line 80
  126. invoke-virtual {p0}, Lio/reactivex/internal/util/OpenHashSet;->rehash()V
  127. :cond_3
  128. return v4
  129. .end method
  130. .method public keys()[Ljava/lang/Object;
  131. .locals 1
  132. .line 169
  133. iget-object v0, p0, Lio/reactivex/internal/util/OpenHashSet;->keys:[Ljava/lang/Object;
  134. return-object v0
  135. .end method
  136. .method rehash()V
  137. .locals 8
  138. .line 136
  139. iget-object v0, p0, Lio/reactivex/internal/util/OpenHashSet;->keys:[Ljava/lang/Object;
  140. .line 137
  141. array-length v1, v0
  142. shl-int/lit8 v2, v1, 0x1
  143. add-int/lit8 v3, v2, -0x1
  144. .line 141
  145. new-array v4, v2, [Ljava/lang/Object;
  146. check-cast v4, [Ljava/lang/Object;
  147. .line 144
  148. iget v5, p0, Lio/reactivex/internal/util/OpenHashSet;->size:I
  149. :goto_0
  150. add-int/lit8 v6, v5, -0x1
  151. if-eqz v5, :cond_3
  152. :goto_1
  153. add-int/lit8 v1, v1, -0x1
  154. .line 145
  155. aget-object v5, v0, v1
  156. if-nez v5, :cond_0
  157. goto :goto_1
  158. .line 146
  159. :cond_0
  160. aget-object v5, v0, v1
  161. invoke-virtual {v5}, Ljava/lang/Object;->hashCode()I
  162. move-result v5
  163. invoke-static {v5}, Lio/reactivex/internal/util/OpenHashSet;->mix(I)I
  164. move-result v5
  165. and-int/2addr v5, v3
  166. .line 147
  167. aget-object v7, v4, v5
  168. if-eqz v7, :cond_2
  169. :cond_1
  170. add-int/lit8 v5, v5, 0x1
  171. and-int/2addr v5, v3
  172. .line 150
  173. aget-object v7, v4, v5
  174. if-nez v7, :cond_1
  175. .line 155
  176. :cond_2
  177. aget-object v7, v0, v1
  178. aput-object v7, v4, v5
  179. move v5, v6
  180. goto :goto_0
  181. .line 158
  182. :cond_3
  183. iput v3, p0, Lio/reactivex/internal/util/OpenHashSet;->mask:I
  184. int-to-float v0, v2
  185. .line 159
  186. iget v1, p0, Lio/reactivex/internal/util/OpenHashSet;->loadFactor:F
  187. mul-float v0, v0, v1
  188. float-to-int v0, v0
  189. iput v0, p0, Lio/reactivex/internal/util/OpenHashSet;->maxSize:I
  190. .line 160
  191. iput-object v4, p0, Lio/reactivex/internal/util/OpenHashSet;->keys:[Ljava/lang/Object;
  192. return-void
  193. .end method
  194. .method public remove(Ljava/lang/Object;)Z
  195. .locals 5
  196. .annotation system Ldalvik/annotation/Signature;
  197. value = {
  198. "(TT;)Z"
  199. }
  200. .end annotation
  201. .line 85
  202. iget-object v0, p0, Lio/reactivex/internal/util/OpenHashSet;->keys:[Ljava/lang/Object;
  203. .line 86
  204. iget v1, p0, Lio/reactivex/internal/util/OpenHashSet;->mask:I
  205. .line 87
  206. invoke-virtual {p1}, Ljava/lang/Object;->hashCode()I
  207. move-result v2
  208. invoke-static {v2}, Lio/reactivex/internal/util/OpenHashSet;->mix(I)I
  209. move-result v2
  210. and-int/2addr v2, v1
  211. .line 88
  212. aget-object v3, v0, v2
  213. const/4 v4, 0x0
  214. if-nez v3, :cond_0
  215. return v4
  216. .line 92
  217. :cond_0
  218. invoke-virtual {v3, p1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
  219. move-result v3
  220. if-eqz v3, :cond_1
  221. .line 93
  222. invoke-virtual {p0, v2, v0, v1}, Lio/reactivex/internal/util/OpenHashSet;->removeEntry(I[Ljava/lang/Object;I)Z
  223. move-result p1
  224. return p1
  225. :cond_1
  226. add-int/lit8 v2, v2, 0x1
  227. and-int/2addr v2, v1
  228. .line 97
  229. aget-object v3, v0, v2
  230. if-nez v3, :cond_2
  231. return v4
  232. .line 101
  233. :cond_2
  234. invoke-virtual {v3, p1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
  235. move-result v3
  236. if-eqz v3, :cond_1
  237. .line 102
  238. invoke-virtual {p0, v2, v0, v1}, Lio/reactivex/internal/util/OpenHashSet;->removeEntry(I[Ljava/lang/Object;I)Z
  239. move-result p1
  240. return p1
  241. .end method
  242. .method removeEntry(I[Ljava/lang/Object;I)Z
  243. .locals 4
  244. .annotation system Ldalvik/annotation/Signature;
  245. value = {
  246. "(I[TT;I)Z"
  247. }
  248. .end annotation
  249. .line 108
  250. iget v0, p0, Lio/reactivex/internal/util/OpenHashSet;->size:I
  251. const/4 v1, 0x1
  252. sub-int/2addr v0, v1
  253. iput v0, p0, Lio/reactivex/internal/util/OpenHashSet;->size:I
  254. :goto_0
  255. add-int/lit8 v0, p1, 0x1
  256. :goto_1
  257. and-int/2addr v0, p3
  258. .line 117
  259. aget-object v2, p2, v0
  260. if-nez v2, :cond_0
  261. const/4 p3, 0x0
  262. .line 119
  263. aput-object p3, p2, p1
  264. return v1
  265. .line 122
  266. :cond_0
  267. invoke-virtual {v2}, Ljava/lang/Object;->hashCode()I
  268. move-result v3
  269. invoke-static {v3}, Lio/reactivex/internal/util/OpenHashSet;->mix(I)I
  270. move-result v3
  271. and-int/2addr v3, p3
  272. if-gt p1, v0, :cond_1
  273. if-ge p1, v3, :cond_2
  274. if-le v3, v0, :cond_3
  275. goto :goto_2
  276. :cond_1
  277. if-lt p1, v3, :cond_3
  278. if-le v3, v0, :cond_3
  279. .line 130
  280. :cond_2
  281. :goto_2
  282. aput-object v2, p2, p1
  283. move p1, v0
  284. goto :goto_0
  285. :cond_3
  286. add-int/lit8 v0, v0, 0x1
  287. goto :goto_1
  288. .end method
  289. .method public size()I
  290. .locals 1
  291. .line 173
  292. iget v0, p0, Lio/reactivex/internal/util/OpenHashSet;->size:I
  293. return v0
  294. .end method