package com.google.gson.internal; import java.io.ObjectStreamException; import java.io.Serializable; import java.util.AbstractMap; import java.util.AbstractSet; import java.util.Arrays; import java.util.Comparator; import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; /* loaded from: classes3.dex */ public final class LinkedHashTreeMap extends AbstractMap implements Serializable { static final /* synthetic */ boolean $assertionsDisabled = false; private static final Comparator NATURAL_ORDER = new Comparator() { // from class: com.google.gson.internal.LinkedHashTreeMap.1 @Override // java.util.Comparator public int compare(Comparable comparable, Comparable comparable2) { return comparable.compareTo(comparable2); } }; Comparator comparator; private LinkedHashTreeMap.EntrySet entrySet; final Node header; private LinkedHashTreeMap.KeySet keySet; int modCount; int size; Node[] table; int threshold; private static int secondaryHash(int i) { int i2 = i ^ ((i >>> 20) ^ (i >>> 12)); return (i2 >>> 4) ^ ((i2 >>> 7) ^ i2); } @Override // java.util.AbstractMap, java.util.Map public int size() { return this.size; } public LinkedHashTreeMap() { this(NATURAL_ORDER); } public LinkedHashTreeMap(Comparator comparator) { this.size = 0; this.modCount = 0; this.comparator = comparator == null ? NATURAL_ORDER : comparator; this.header = new Node<>(); Node[] nodeArr = new Node[16]; this.table = nodeArr; this.threshold = (nodeArr.length / 2) + (nodeArr.length / 4); } @Override // java.util.AbstractMap, java.util.Map public V get(Object obj) { Node findByObject = findByObject(obj); if (findByObject != null) { return findByObject.value; } return null; } @Override // java.util.AbstractMap, java.util.Map public boolean containsKey(Object obj) { return findByObject(obj) != null; } @Override // java.util.AbstractMap, java.util.Map public V put(K k, V v) { if (k == null) { throw new NullPointerException("key == null"); } Node find = find(k, true); V v2 = find.value; find.value = v; return v2; } @Override // java.util.AbstractMap, java.util.Map public void clear() { Arrays.fill(this.table, (Object) null); this.size = 0; this.modCount++; Node node = this.header; Node node2 = node.next; while (node2 != node) { Node node3 = node2.next; node2.prev = null; node2.next = null; node2 = node3; } node.prev = node; node.next = node; } @Override // java.util.AbstractMap, java.util.Map public V remove(Object obj) { Node removeInternalByKey = removeInternalByKey(obj); if (removeInternalByKey != null) { return removeInternalByKey.value; } return null; } Node find(K k, boolean z) { int i; Node node; Comparator comparator = this.comparator; Node[] nodeArr = this.table; int secondaryHash = secondaryHash(k.hashCode()); int length = (nodeArr.length - 1) & secondaryHash; Node node2 = nodeArr[length]; if (node2 != null) { Comparable comparable = comparator == NATURAL_ORDER ? (Comparable) k : null; while (true) { if (comparable != null) { i = comparable.compareTo(node2.key); } else { i = comparator.compare(k, node2.key); } if (i == 0) { return node2; } Node node3 = i < 0 ? node2.left : node2.right; if (node3 == null) { break; } node2 = node3; } } else { i = 0; } Node node4 = node2; int i2 = i; if (!z) { return null; } Node node5 = this.header; if (node4 == null) { if (comparator == NATURAL_ORDER && !(k instanceof Comparable)) { throw new ClassCastException(k.getClass().getName() + " is not Comparable"); } node = new Node<>(node4, k, secondaryHash, node5, node5.prev); nodeArr[length] = node; } else { node = new Node<>(node4, k, secondaryHash, node5, node5.prev); if (i2 < 0) { node4.left = node; } else { node4.right = node; } rebalance(node4, true); } int i3 = this.size; this.size = i3 + 1; if (i3 > this.threshold) { doubleCapacity(); } this.modCount++; return node; } /* JADX WARN: Multi-variable type inference failed */ Node findByObject(Object obj) { if (obj == 0) { return null; } try { return find(obj, false); } catch (ClassCastException unused) { return null; } } Node findByEntry(Map.Entry entry) { Node findByObject = findByObject(entry.getKey()); if (findByObject == null || !equal(findByObject.value, entry.getValue())) { return null; } return findByObject; } private boolean equal(Object obj, Object obj2) { return obj == obj2 || (obj != null && obj.equals(obj2)); } void removeInternal(Node node, boolean z) { int i; if (z) { node.prev.next = node.next; node.next.prev = node.prev; node.prev = null; node.next = null; } Node node2 = node.left; Node node3 = node.right; Node node4 = node.parent; int i2 = 0; if (node2 != null && node3 != null) { Node last = node2.height > node3.height ? node2.last() : node3.first(); removeInternal(last, false); Node node5 = node.left; if (node5 != null) { i = node5.height; last.left = node5; node5.parent = last; node.left = null; } else { i = 0; } Node node6 = node.right; if (node6 != null) { i2 = node6.height; last.right = node6; node6.parent = last; node.right = null; } last.height = Math.max(i, i2) + 1; replaceInParent(node, last); return; } if (node2 != null) { replaceInParent(node, node2); node.left = null; } else if (node3 != null) { replaceInParent(node, node3); node.right = null; } else { replaceInParent(node, null); } rebalance(node4, false); this.size--; this.modCount++; } Node removeInternalByKey(Object obj) { Node findByObject = findByObject(obj); if (findByObject != null) { removeInternal(findByObject, true); } return findByObject; } private void replaceInParent(Node node, Node node2) { Node node3 = node.parent; node.parent = null; if (node2 != null) { node2.parent = node3; } if (node3 != null) { if (node3.left == node) { node3.left = node2; return; } else { node3.right = node2; return; } } int i = node.hash; this.table[i & (r2.length - 1)] = node2; } private void rebalance(Node node, boolean z) { while (node != null) { Node node2 = node.left; Node node3 = node.right; int i = node2 != null ? node2.height : 0; int i2 = node3 != null ? node3.height : 0; int i3 = i - i2; if (i3 == -2) { Node node4 = node3.left; Node node5 = node3.right; int i4 = (node4 != null ? node4.height : 0) - (node5 != null ? node5.height : 0); if (i4 == -1 || (i4 == 0 && !z)) { rotateLeft(node); } else { rotateRight(node3); rotateLeft(node); } if (z) { return; } } else if (i3 == 2) { Node node6 = node2.left; Node node7 = node2.right; int i5 = (node6 != null ? node6.height : 0) - (node7 != null ? node7.height : 0); if (i5 == 1 || (i5 == 0 && !z)) { rotateRight(node); } else { rotateLeft(node2); rotateRight(node); } if (z) { return; } } else if (i3 == 0) { node.height = i + 1; if (z) { return; } } else { node.height = Math.max(i, i2) + 1; if (!z) { return; } } node = node.parent; } } private void rotateLeft(Node node) { Node node2 = node.left; Node node3 = node.right; Node node4 = node3.left; Node node5 = node3.right; node.right = node4; if (node4 != null) { node4.parent = node; } replaceInParent(node, node3); node3.left = node; node.parent = node3; node.height = Math.max(node2 != null ? node2.height : 0, node4 != null ? node4.height : 0) + 1; node3.height = Math.max(node.height, node5 != null ? node5.height : 0) + 1; } private void rotateRight(Node node) { Node node2 = node.left; Node node3 = node.right; Node node4 = node2.left; Node node5 = node2.right; node.left = node5; if (node5 != null) { node5.parent = node; } replaceInParent(node, node2); node2.right = node; node.parent = node2; node.height = Math.max(node3 != null ? node3.height : 0, node5 != null ? node5.height : 0) + 1; node2.height = Math.max(node.height, node4 != null ? node4.height : 0) + 1; } @Override // java.util.AbstractMap, java.util.Map public Set> entrySet() { LinkedHashTreeMap.EntrySet entrySet = this.entrySet; if (entrySet != null) { return entrySet; } LinkedHashTreeMap.EntrySet entrySet2 = new EntrySet(); this.entrySet = entrySet2; return entrySet2; } @Override // java.util.AbstractMap, java.util.Map public Set keySet() { LinkedHashTreeMap.KeySet keySet = this.keySet; if (keySet != null) { return keySet; } LinkedHashTreeMap.KeySet keySet2 = new KeySet(); this.keySet = keySet2; return keySet2; } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes3.dex */ public static final class Node implements Map.Entry { final int hash; int height; final K key; Node left; Node next; Node parent; Node prev; Node right; V value; @Override // java.util.Map.Entry public K getKey() { return this.key; } @Override // java.util.Map.Entry public V getValue() { return this.value; } @Override // java.util.Map.Entry public V setValue(V v) { V v2 = this.value; this.value = v; return v2; } Node() { this.key = null; this.hash = -1; this.prev = this; this.next = this; } Node(Node node, K k, int i, Node node2, Node node3) { this.parent = node; this.key = k; this.hash = i; this.height = 1; this.next = node2; this.prev = node3; node3.next = this; node2.prev = this; } @Override // java.util.Map.Entry public boolean equals(Object obj) { if (!(obj instanceof Map.Entry)) { return false; } Map.Entry entry = (Map.Entry) obj; K k = this.key; if (k == null) { if (entry.getKey() != null) { return false; } } else if (!k.equals(entry.getKey())) { return false; } V v = this.value; if (v == null) { if (entry.getValue() != null) { return false; } } else if (!v.equals(entry.getValue())) { return false; } return true; } @Override // java.util.Map.Entry public int hashCode() { K k = this.key; int hashCode = k == null ? 0 : k.hashCode(); V v = this.value; return hashCode ^ (v != null ? v.hashCode() : 0); } public String toString() { return this.key + "=" + this.value; } public Node first() { Node node = this.left; while (true) { Node node2 = node; Node node3 = this; this = node2; if (this == null) { return node3; } node = this.left; } } public Node last() { Node node = this.right; while (true) { Node node2 = node; Node node3 = this; this = node2; if (this == null) { return node3; } node = this.right; } } } private void doubleCapacity() { Node[] doubleCapacity = doubleCapacity(this.table); this.table = doubleCapacity; this.threshold = (doubleCapacity.length / 2) + (doubleCapacity.length / 4); } static Node[] doubleCapacity(Node[] nodeArr) { int length = nodeArr.length; Node[] nodeArr2 = new Node[length * 2]; AvlIterator avlIterator = new AvlIterator(); AvlBuilder avlBuilder = new AvlBuilder(); AvlBuilder avlBuilder2 = new AvlBuilder(); for (int i = 0; i < length; i++) { Node node = nodeArr[i]; if (node != null) { avlIterator.reset(node); int i2 = 0; int i3 = 0; while (true) { Node next = avlIterator.next(); if (next == null) { break; } if ((next.hash & length) == 0) { i2++; } else { i3++; } } avlBuilder.reset(i2); avlBuilder2.reset(i3); avlIterator.reset(node); while (true) { Node next2 = avlIterator.next(); if (next2 == null) { break; } if ((next2.hash & length) == 0) { avlBuilder.add(next2); } else { avlBuilder2.add(next2); } } nodeArr2[i] = i2 > 0 ? avlBuilder.root() : null; nodeArr2[i + length] = i3 > 0 ? avlBuilder2.root() : null; } } return nodeArr2; } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes3.dex */ public static class AvlIterator { private Node stackTop; AvlIterator() { } void reset(Node node) { Node node2 = null; while (node != null) { node.parent = node2; node2 = node; node = node.left; } this.stackTop = node2; } public Node next() { Node node = this.stackTop; if (node == null) { return null; } Node node2 = node.parent; node.parent = null; Node node3 = node.right; while (true) { Node node4 = node2; node2 = node3; if (node2 == null) { this.stackTop = node4; return node; } node2.parent = node4; node3 = node2.left; } } } /* JADX INFO: Access modifiers changed from: package-private */ /* loaded from: classes3.dex */ public static final class AvlBuilder { private int leavesSkipped; private int leavesToSkip; private int size; private Node stack; AvlBuilder() { } void reset(int i) { this.leavesToSkip = ((Integer.highestOneBit(i) * 2) - 1) - i; this.size = 0; this.leavesSkipped = 0; this.stack = null; } void add(Node node) { node.right = null; node.parent = null; node.left = null; node.height = 1; int i = this.leavesToSkip; if (i > 0) { int i2 = this.size; if ((i2 & 1) == 0) { this.size = i2 + 1; this.leavesToSkip = i - 1; this.leavesSkipped++; } } node.parent = this.stack; this.stack = node; int i3 = this.size; int i4 = i3 + 1; this.size = i4; int i5 = this.leavesToSkip; if (i5 > 0 && (i4 & 1) == 0) { this.size = i3 + 2; this.leavesToSkip = i5 - 1; this.leavesSkipped++; } int i6 = 4; while (true) { int i7 = i6 - 1; if ((this.size & i7) != i7) { return; } int i8 = this.leavesSkipped; if (i8 == 0) { Node node2 = this.stack; Node node3 = node2.parent; Node node4 = node3.parent; node3.parent = node4.parent; this.stack = node3; node3.left = node4; node3.right = node2; node3.height = node2.height + 1; node4.parent = node3; node2.parent = node3; } else if (i8 == 1) { Node node5 = this.stack; Node node6 = node5.parent; this.stack = node6; node6.right = node5; node6.height = node5.height + 1; node5.parent = node6; this.leavesSkipped = 0; } else if (i8 == 2) { this.leavesSkipped = 0; } i6 *= 2; } } Node root() { Node node = this.stack; if (node.parent == null) { return node; } throw new IllegalStateException(); } } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes3.dex */ public abstract class LinkedTreeMapIterator implements Iterator { int expectedModCount; Node lastReturned = null; Node next; LinkedTreeMapIterator() { this.next = LinkedHashTreeMap.this.header.next; this.expectedModCount = LinkedHashTreeMap.this.modCount; } @Override // java.util.Iterator public final boolean hasNext() { return this.next != LinkedHashTreeMap.this.header; } final Node nextNode() { Node node = this.next; if (node == LinkedHashTreeMap.this.header) { throw new NoSuchElementException(); } if (LinkedHashTreeMap.this.modCount != this.expectedModCount) { throw new ConcurrentModificationException(); } this.next = node.next; this.lastReturned = node; return node; } @Override // java.util.Iterator public final void remove() { Node node = this.lastReturned; if (node == null) { throw new IllegalStateException(); } LinkedHashTreeMap.this.removeInternal(node, true); this.lastReturned = null; this.expectedModCount = LinkedHashTreeMap.this.modCount; } } /* loaded from: classes3.dex */ final class EntrySet extends AbstractSet> { EntrySet() { } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public int size() { return LinkedHashTreeMap.this.size; } @Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set public Iterator> iterator() { return new LinkedHashTreeMap.LinkedTreeMapIterator>() { // from class: com.google.gson.internal.LinkedHashTreeMap.EntrySet.1 { LinkedHashTreeMap linkedHashTreeMap = LinkedHashTreeMap.this; } @Override // java.util.Iterator public Map.Entry next() { return nextNode(); } }; } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public boolean contains(Object obj) { return (obj instanceof Map.Entry) && LinkedHashTreeMap.this.findByEntry((Map.Entry) obj) != null; } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public boolean remove(Object obj) { Node findByEntry; if (!(obj instanceof Map.Entry) || (findByEntry = LinkedHashTreeMap.this.findByEntry((Map.Entry) obj)) == null) { return false; } LinkedHashTreeMap.this.removeInternal(findByEntry, true); return true; } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public void clear() { LinkedHashTreeMap.this.clear(); } } /* loaded from: classes3.dex */ final class KeySet extends AbstractSet { KeySet() { } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public int size() { return LinkedHashTreeMap.this.size; } @Override // java.util.AbstractCollection, java.util.Collection, java.lang.Iterable, java.util.Set public Iterator iterator() { return new LinkedHashTreeMap.LinkedTreeMapIterator() { // from class: com.google.gson.internal.LinkedHashTreeMap.KeySet.1 { LinkedHashTreeMap linkedHashTreeMap = LinkedHashTreeMap.this; } @Override // java.util.Iterator public K next() { return nextNode().key; } }; } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public boolean contains(Object obj) { return LinkedHashTreeMap.this.containsKey(obj); } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public boolean remove(Object obj) { return LinkedHashTreeMap.this.removeInternalByKey(obj) != null; } @Override // java.util.AbstractCollection, java.util.Collection, java.util.Set public void clear() { LinkedHashTreeMap.this.clear(); } } private Object writeReplace() throws ObjectStreamException { return new LinkedHashMap(this); } }