(Node<K, V> node)
| 1893 | } |
| 1894 | |
| 1895 | void removeLeftmost(Node<K, V> node) { |
| 1896 | int index = node.left_idx; |
| 1897 | if (node.size == 1) { |
| 1898 | deleteNode(node); |
| 1899 | } else if (node.prev != null && (Node.NODE_SIZE - 1 - node.prev.right_idx) > node.size) { |
| 1900 | // move all to prev node and kill it |
| 1901 | Node<K, V> prev = node.prev; |
| 1902 | int size = node.right_idx - index; |
| 1903 | System.arraycopy(node.keys, index + 1, prev.keys, prev.right_idx + 1, size); |
| 1904 | System.arraycopy(node.values, index + 1, prev.values, prev.right_idx + 1, size); |
| 1905 | prev.right_idx += size; |
| 1906 | prev.size += size; |
| 1907 | deleteNode(node); |
| 1908 | } else if (node.next != null && (node.next.left_idx) > node.size) { |
| 1909 | // move all to next node and kill it |
| 1910 | Node<K, V> next = node.next; |
| 1911 | int size = node.right_idx - index; |
| 1912 | int next_new_left = next.left_idx - size; |
| 1913 | next.left_idx = next_new_left; |
| 1914 | System.arraycopy(node.keys, index + 1, next.keys, next_new_left, size); |
| 1915 | System.arraycopy(node.values, index + 1, next.values, next_new_left, size); |
| 1916 | next.size += size; |
| 1917 | deleteNode(node); |
| 1918 | } else { |
| 1919 | node.keys[index] = null; |
| 1920 | node.values[index] = null; |
| 1921 | node.left_idx++; |
| 1922 | node.size--; |
| 1923 | Node<K, V> prev = node.prev; |
| 1924 | if (prev != null && prev.size == 1) { |
| 1925 | node.size++; |
| 1926 | node.left_idx--; |
| 1927 | node.keys [node.left_idx] = prev.keys [prev.left_idx]; |
| 1928 | node.values[node.left_idx] = prev.values[prev.left_idx]; |
| 1929 | deleteNode(prev); |
| 1930 | } |
| 1931 | } |
| 1932 | modCount++; |
| 1933 | size--; |
| 1934 | } |
| 1935 | |
| 1936 | void removeRightmost(Node<K, V> node) { |
| 1937 | int index = node.right_idx; |
no test coverage detected