public static void performSlice(Pair<Long,FrameBlock> in,IndexRange ixrange,int brlen,int bclen,ArrayList<Pair<Long,FrameBlock>> outlist) throws DMLRuntimeException {
  long index=in.getKey();
  FrameBlock block=in.getValue();
  long cellIndexTopRow=index;
  long cellIndexBottomRow=index + block.getNumRows() - 1;
  long cellIndexLeftCol=1;
  long cellIndexRightCol=block.getNumColumns();
  long cellIndexOverlapTop=Math.max(cellIndexTopRow,ixrange.rowStart);
  long cellIndexOverlapBottom=Math.min(cellIndexBottomRow,ixrange.rowEnd);
  long cellIndexOverlapLeft=Math.max(cellIndexLeftCol,ixrange.colStart);
  long cellIndexOverlapRight=Math.min(cellIndexRightCol,ixrange.colEnd);
  if (cellIndexOverlapTop > cellIndexOverlapBottom || cellIndexOverlapLeft > cellIndexOverlapRight) {
    return;
  }
  IndexRange tmpRange=new IndexRange(cellIndexOverlapTop - index,cellIndexOverlapBottom - index,cellIndexOverlapLeft - 1,cellIndexOverlapRight - 1);
  int rowCut=(int)(ixrange.rowStart - index);
  long resultBlockIndexTop=UtilFunctions.computeBlockIndex(cellIndexOverlapTop,brlen);
  long resultBlockIndexBottom=UtilFunctions.computeBlockIndex(cellIndexOverlapBottom,brlen);
  for (long r=resultBlockIndexTop; r <= resultBlockIndexBottom; r++) {
    ValueType[] schema=Arrays.copyOfRange(block.getSchema(),(int)tmpRange.colStart,(int)tmpRange.colEnd + 1);
    long iResultIndex=Math.max(((r - 1) * brlen - ixrange.rowStart + 1),0);
    Pair<Long,FrameBlock> out=new Pair<Long,FrameBlock>(new Long(iResultIndex + 1),new FrameBlock(schema));
    outlist.add(out);
  }
  block.sliceOperations(outlist,tmpRange,rowCut);
}

public static void performSlice ( Pair < Long , FrameBlock > in , IndexRange ixrange , int brlen , int bclen , ArrayList < Pair < Long , FrameBlock > > outlist ) throws DMLRuntimeException { long index = in . getKey ( ) ; FrameBlock block = in . getValue ( ) ; long cellIndexTopRow = index ; long cellIndexBottomRow = index + block . getNumRows ( ) - 1 ; long cellIndexLeftCol = 1 ; long cellIndexRightCol = block . getNumColumns ( ) ; long cellIndexOverlapTop = Math . max ( cellIndexTopRow , ixrange . rowStart ) ; long cellIndexOverlapBottom = Math . min ( cellIndexBottomRow , ixrange . rowEnd ) ; long cellIndexOverlapLeft = Math . max ( cellIndexLeftCol , ixrange . colStart ) ; long cellIndexOverlapRight = Math . min ( cellIndexRightCol , ixrange . colEnd ) ; if ( cellIndexOverlapTop > cellIndexOverlapBottom || cellIndexOverlapLeft > cellIndexOverlapRight ) { return ; } IndexRange tmpRange = new IndexRange ( cellIndexOverlapTop - index , cellIndexOverlapBottom - index , cellIndexOverlapLeft - 1 , cellIndexOverlapRight - 1 ) ; int rowCut = ( int ) ( ixrange . rowStart - index ) ; long resultBlockIndexTop = UtilFunctions . computeBlockIndex ( cellIndexOverlapTop , brlen ) ; long resultBlockIndexBottom = UtilFunctions . computeBlockIndex ( cellIndexOverlapBottom , brlen ) ; for ( long r = resultBlockIndexTop ; r <= resultBlockIndexBottom ; r ++ ) { ValueType [ ] schema = Arrays . copyOfRange ( block . getSchema ( ) , ( int ) tmpRange . colStart , ( int ) tmpRange . colEnd + 1 ) ; long iResultIndex = Math . max ( ( ( r - 1 ) * brlen - ixrange . rowStart + 1 ) , 0 ) ; Pair < Long , FrameBlock > out = new Pair < Long , FrameBlock > ( new Long ( iResultIndex + 1 ) , new FrameBlock ( schema ) ) ; outlist . add ( out ) ; } block . sliceOperations ( outlist , tmpRange , rowCut ) ; }
this function will get slice of the input frame block overlapping in overall slice ( range ) , slice has requested for .
