code: @Override
      public void meld(MergeableAddressableHeap<K, V> other) {
          BinaryTreeSoftAddressableHeap<K, V> h = (BinaryTreeSoftAddressableHeap<K, V>) other;
  
          // check same comparator
          if (comparator != null) {
              if (h.comparator == null || !h.comparator.equals(comparator)) {
                  throw new IllegalArgumentException("Cannot meld heaps using different comparators!");
              }
          } else if (h.comparator != null) {
              throw new IllegalArgumentException("Cannot meld heaps using different comparators!");
          }
  
          if (rankLimit != h.rankLimit) {
              throw new IllegalArgumentException("Cannot meld heaps with different error rates!");
          }
  
          if (h.other != h) {
              throw new IllegalStateException("A heap cannot be used after a meld.");
          }
  
          // perform the meld
          mergeInto(h.rootList.head, h.rootList.tail);
          size += h.size;
  
          // clear other
          h.size = 0;
          h.rootList.head = null;
          h.rootList.tail = null;
  
          // take ownership
          h.other = this;
      }
docs: {@inheritDoc}
  
  @throws IllegalArgumentException
  if {@code other} has a different error rate