public void visitContainedRecords(RecordVisitor rv) {PositionTrackingVisitor stv = new PositionTrackingVisitor(rv, 0);final int blockCount = getRowBlockCount();for (int blockIndex = 0; blockIndex < blockCount; blockIndex++) {int pos=0;final int rowBlockSize = visitRowRecordsForBlock(blockIndex, rv);pos += rowBlockSize;final int startRowNumber = getStartRowNumberForBlock(blockIndex);final int endRowNumber = getEndRowNumberForBlock(blockIndex);final List<Short> cellOffsets = new ArrayList<>();int cellRefOffset = (rowBlockSize - RowRecord.ENCODED_SIZE);for (int row = startRowNumber; row <= endRowNumber; row++) {if (_valuesAgg.rowHasCells(row)) {stv.setPosition(0);_valuesAgg.visitCellsForRow(row, stv);int rowCellSize = stv.getPosition();pos += rowCellSize;cellOffsets.add((short)cellRefOffset);cellRefOffset = rowCellSize;}}rv.visitRecord(new DBCellRecord(pos, shortListToArray(cellOffsets)));}_unknownRecords.forEach(rv::visitRecord);}

public override void VisitContainedRecords(RecordVisitor rv){PositionTrackingVisitor stv = new PositionTrackingVisitor(rv, 0);int blockCount = this.RowBlockCount;for (int blockIndex = 0; blockIndex < blockCount; blockIndex++){int pos = 0;int rowBlockSize = VisitRowRecordsForBlock(blockIndex, rv);pos += rowBlockSize;int startRowNumber = GetStartRowNumberForBlock(blockIndex);int endRowNumber = GetEndRowNumberForBlock(blockIndex);DBCellRecord cellRecord = new DBCellRecord();int cellRefOffset = (rowBlockSize - RowRecord.ENCODED_SIZE);for (int row = startRowNumber; row <= endRowNumber; row++){if (_valuesAgg.RowHasCells(row)){stv.Position = 0;_valuesAgg.VisitCellsForRow(row, stv);int rowCellSize = stv.Position;pos += rowCellSize;cellRecord.AddCellOffset((short)cellRefOffset);cellRefOffset = rowCellSize;}}cellRecord.RowOffset = (pos);rv.VisitRecord(cellRecord);}for (int i = 0; i < _unknownRecords.Count; i++){rv.VisitRecord((Record)_unknownRecords[i]);}}
