code: private Object[] buildFromRange(int offset, int keyLength, boolean isLeaf, boolean isExtra)
      {
          // if keyLength is 0, we didn't copy anything from the original, which means we didn't
          // modify any of the range owned by it, so can simply return it as is
          if (keyLength == 0)
              return copyFrom;
  
          Object[] a;
          if (isLeaf)
          {
              a = new Object[keyLength + (keyLength & 1)];
              System.arraycopy(buildKeys, offset, a, 0, keyLength);
          }
          else
          {
              a = new Object[1 + (keyLength * 2)];
              System.arraycopy(buildKeys, offset, a, 0, keyLength);
              System.arraycopy(buildChildren, offset, a, keyLength, keyLength + 1);
          }
          if (isExtra)
              updateFunction.allocated(ObjectSizes.sizeOfArray(a));
          else if (a.length != copyFrom.length)
              updateFunction.allocated(ObjectSizes.sizeOfArray(a) -
                                       (copyFrom.length == 0 ? 0 : ObjectSizes.sizeOfArray(copyFrom)));
          return a;
      }
docs: builds and returns a node from the buffered objects in the given range