(Node<K, V> node, int index)
| 2048 | } |
| 2049 | |
| 2050 | void removeFromIterator(Node<K, V> node, int index) { |
| 2051 | if (node.size == 1) { |
| 2052 | // it is safe to delete the whole node here. |
| 2053 | // iterator already moved to the next node; |
| 2054 | deleteNode(node); |
| 2055 | } else { |
| 2056 | int left_idx = node.left_idx; |
| 2057 | if (index == left_idx) { |
| 2058 | Node<K, V> prev = node.prev; |
| 2059 | if (prev != null && prev.size == 1) { |
| 2060 | node.keys [left_idx] = prev.keys [prev.left_idx]; |
| 2061 | node.values[left_idx] = prev.values[prev.left_idx]; |
| 2062 | deleteNode(prev); |
| 2063 | } else { |
| 2064 | node.keys [left_idx] = null; |
| 2065 | node.values[left_idx] = null; |
| 2066 | node.left_idx++; |
| 2067 | node.size--; |
| 2068 | } |
| 2069 | } else if (index == node.right_idx) { |
| 2070 | node.keys [index] = null; |
| 2071 | node.values[index] = null; |
| 2072 | node.right_idx--; |
| 2073 | node.size--; |
| 2074 | } else { |
| 2075 | int moveFromRight = node.right_idx - index; |
| 2076 | int moveFromLeft = index - left_idx; |
| 2077 | if (moveFromRight <= moveFromLeft) { |
| 2078 | System.arraycopy(node.keys, index + 1, node.keys, index, moveFromRight ); |
| 2079 | System.arraycopy(node.values, index + 1, node.values, index, moveFromRight ); |
| 2080 | node.keys [node.right_idx] = null; |
| 2081 | node.values[node.right_idx] = null; |
| 2082 | node.right_idx--; |
| 2083 | node.size--; |
| 2084 | } else { |
| 2085 | System.arraycopy(node.keys, left_idx, node.keys, left_idx+ 1, moveFromLeft); |
| 2086 | System.arraycopy(node.values, left_idx, node.values, left_idx+ 1, moveFromLeft); |
| 2087 | node.keys [left_idx] = null; |
| 2088 | node.values[left_idx] = null; |
| 2089 | node.left_idx++; |
| 2090 | node.size--; |
| 2091 | } |
| 2092 | } |
| 2093 | } |
| 2094 | modCount++; |
| 2095 | size--; |
| 2096 | } |
| 2097 | |
| 2098 | private void deleteNode(Node<K, V> node) { |
| 2099 | if (node.right == null) { |
no test coverage detected