vector/src/main/java/org/apache/arrow/vector/complex/ListVector.java [515:572]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      this.to = to;
      to.addOrGetVector(vector.getField().getFieldType());
      if (to.getDataVector() instanceof ZeroVector) {
        to.addOrGetVector(vector.getField().getFieldType());
      }
      dataTransferPair = getDataVector().makeTransferPair(to.getDataVector());
    }

    /**
     * Transfer this vector'data to another vector. The memory associated with this vector is
     * transferred to the allocator of target vector for accounting and management purposes.
     */
    @Override
    public void transfer() {
      to.clear();
      dataTransferPair.transfer();
      to.validityBuffer = transferBuffer(validityBuffer, to.allocator);
      to.offsetBuffer = transferBuffer(offsetBuffer, to.allocator);
      to.lastSet = lastSet;
      if (valueCount > 0) {
        to.setValueCount(valueCount);
      }
      clear();
    }

    /**
     * Slice this vector at desired index and length and transfer the corresponding data to the
     * target vector.
     *
     * @param startIndex start position of the split in source vector.
     * @param length length of the split.
     */
    @Override
    public void splitAndTransfer(int startIndex, int length) {
      Preconditions.checkArgument(
          startIndex >= 0 && length >= 0 && startIndex + length <= valueCount,
          "Invalid parameters startIndex: %s, length: %s for valueCount: %s",
          startIndex,
          length,
          valueCount);
      to.clear();
      if (length > 0) {
        final int startPoint = offsetBuffer.getInt(startIndex * OFFSET_WIDTH);
        final int sliceLength =
            offsetBuffer.getInt((startIndex + length) * OFFSET_WIDTH) - startPoint;
        to.offsetBuffer = to.allocateOffsetBuffer((length + 1) * OFFSET_WIDTH);
        /* splitAndTransfer offset buffer */
        for (int i = 0; i < length + 1; i++) {
          final int relativeOffset =
              offsetBuffer.getInt((startIndex + i) * OFFSET_WIDTH) - startPoint;
          to.offsetBuffer.setInt(i * OFFSET_WIDTH, relativeOffset);
        }
        /* splitAndTransfer validity buffer */
        splitAndTransferValidityBuffer(startIndex, length, to);
        /* splitAndTransfer data buffer */
        dataTransferPair.splitAndTransfer(startPoint, sliceLength);
        to.lastSet = length - 1;
        to.setValueCount(length);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java [174:231]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      this.to = to;
      to.addOrGetVector(vector.getField().getFieldType());
      if (to.getDataVector() instanceof ZeroVector) {
        to.addOrGetVector(vector.getField().getFieldType());
      }
      dataTransferPair = getDataVector().makeTransferPair(to.getDataVector());
    }

    /**
     * Transfer this vector'data to another vector. The memory associated with this vector is
     * transferred to the allocator of target vector for accounting and management purposes.
     */
    @Override
    public void transfer() {
      to.clear();
      dataTransferPair.transfer();
      to.validityBuffer = transferBuffer(validityBuffer, to.allocator);
      to.offsetBuffer = transferBuffer(offsetBuffer, to.allocator);
      to.lastSet = lastSet;
      if (valueCount > 0) {
        to.setValueCount(valueCount);
      }
      clear();
    }

    /**
     * Slice this vector at desired index and length and transfer the corresponding data to the
     * target vector.
     *
     * @param startIndex start position of the split in source vector.
     * @param length length of the split.
     */
    @Override
    public void splitAndTransfer(int startIndex, int length) {
      Preconditions.checkArgument(
          startIndex >= 0 && length >= 0 && startIndex + length <= valueCount,
          "Invalid parameters startIndex: %s, length: %s for valueCount: %s",
          startIndex,
          length,
          valueCount);
      to.clear();
      if (length > 0) {
        final int startPoint = offsetBuffer.getInt(startIndex * OFFSET_WIDTH);
        final int sliceLength =
            offsetBuffer.getInt((startIndex + length) * OFFSET_WIDTH) - startPoint;
        to.offsetBuffer = to.allocateOffsetBuffer((length + 1) * OFFSET_WIDTH);
        /* splitAndTransfer offset buffer */
        for (int i = 0; i < length + 1; i++) {
          final int relativeOffset =
              offsetBuffer.getInt((startIndex + i) * OFFSET_WIDTH) - startPoint;
          to.offsetBuffer.setInt(i * OFFSET_WIDTH, relativeOffset);
        }
        /* splitAndTransfer validity buffer */
        splitAndTransferValidityBuffer(startIndex, length, to);
        /* splitAndTransfer data buffer */
        dataTransferPair.splitAndTransfer(startPoint, sliceLength);
        to.lastSet = length - 1;
        to.setValueCount(length);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



