BCMapCellIterator::SetNewRowGroup(PRBool aFindFirstDamagedRow)
BCMapBorderIterator::SetNewRowGroup()
BCMapCellIterator::SetNewRowGroup(PRBool aFindFirstDamagedRow){  mAtEnd = PR_TRUE;  mRowGroupIndex++;  PRInt32 numRowGroups = mRowGroups.Count();  for (PRInt32 rgX = mRowGroupIndex; rgX < numRowGroups; rgX++) {    nsIFrame* frame = (nsTableRowGroupFrame*)mRowGroups.ElementAt(mRowGroupIndex); if (!frame) ABORT1(PR_FALSE);    mRowGroup = mTableFrame.GetRowGroupFrame(frame); if (!mRowGroup) ABORT1(PR_FALSE);    mRowGroupStart = mRowGroup->GetStartRowIndex();    mRowGroupEnd   = mRowGroupStart + mRowGroup->GetRowCount() - 1;    if (mRowGroupEnd >= 0) {      mCellMap  = mTableCellMap->GetMapFor(*mRowGroup);      nsTableRowFrame* firstRow = mRowGroup->GetFirstRow();      if (aFindFirstDamagedRow) {        if ((mAreaStart.y >= mRowGroupStart) && (mAreaStart.y <= mRowGroupEnd)) {          // the damage area starts in the row group           if (aFindFirstDamagedRow) {            // find the correct first damaged row            PRInt32 numRows = mAreaStart.y - mRowGroupStart;            for (PRInt32 i = 0; i < numRows; i++) {              firstRow = firstRow->GetNextRow(); if (!frame) ABORT1(PR_FALSE);            }          }        }        else {          mRowGroupIndex++;          continue;        }      }      if (SetNewRow(firstRow)) { // sets mAtEnd        break;      }    }  }      return !mAtEnd;}