(Node<K, V> node)
| 1934 | } |
| 1935 | |
| 1936 | void removeRightmost(Node<K, V> node) { |
| 1937 | int index = node.right_idx; |
| 1938 | if (node.size == 1) { |
| 1939 | deleteNode(node); |
| 1940 | } else if (node.prev != null && (Node.NODE_SIZE - 1 - node.prev.right_idx) > node.size) { |
| 1941 | // move all to prev node and kill it |
| 1942 | Node<K, V> prev = node.prev; |
| 1943 | int left_idx = node.left_idx; |
| 1944 | int size = index - left_idx; |
| 1945 | System.arraycopy(node.keys, left_idx, prev.keys, prev.right_idx + 1, size); |
| 1946 | System.arraycopy(node.values, left_idx, prev.values, prev.right_idx + 1, size); |
| 1947 | prev.right_idx += size; |
| 1948 | prev.size += size; |
| 1949 | deleteNode(node); |
| 1950 | } else if (node.next != null && (node.next.left_idx) > node.size) { |
| 1951 | // move all to next node and kill it |
| 1952 | Node<K, V> next = node.next; |
| 1953 | int left_idx = node.left_idx; |
| 1954 | int size = index - left_idx; |
| 1955 | int next_new_left = next.left_idx - size; |
| 1956 | next.left_idx = next_new_left; |
| 1957 | System.arraycopy(node.keys, left_idx, next.keys, next_new_left, size); |
| 1958 | System.arraycopy(node.values, left_idx, next.values, next_new_left, size); |
| 1959 | next.size += size; |
| 1960 | deleteNode(node); |
| 1961 | } else { |
| 1962 | node.keys[index] = null; |
| 1963 | node.values[index] = null; |
| 1964 | node.right_idx--; |
| 1965 | node.size--; |
| 1966 | Node<K, V> next = node.next; |
| 1967 | if (next != null && next.size == 1) { |
| 1968 | node.size++; |
| 1969 | node.right_idx++; |
| 1970 | node.keys[node.right_idx] = next.keys[next.left_idx]; |
| 1971 | node.values[node.right_idx] = next.values[next.left_idx]; |
| 1972 | deleteNode(next); |
| 1973 | } |
| 1974 | } |
| 1975 | modCount++; |
| 1976 | size--; |
| 1977 | } |
| 1978 | |
| 1979 | void removeMiddleElement(Node<K, V> node, int index) { |
| 1980 | // this function is called iff index if some middle element; |
no test coverage detected