if (row) result = (CellData *)(row->ElementAt(aColIndex)); return result;
if (!row) return nsnull;  CellData* data = (CellData *)(row->ElementAt(aColIndex)); if (!data && aUpdateZeroSpan) { PRBool didZeroExpand = PR_FALSE;  PRInt32 prevRowX = aMapRowIndex - 1;  for ( ; prevRowX > 0; prevRowX--) { nsVoidArray* prevRow = (nsVoidArray *)(mRows.ElementAt(prevRowX)); CellData* prevData = (CellData *)(prevRow->ElementAt(aColIndex)); if (prevData) { if (prevData->IsZeroRowSpan()) { PRInt32 rowIndex = prevRowX - prevData->GetRowSpanOffset(); PRInt32 colIndex = 0;   if ((prevData->IsColSpan()) && (!prevData->IsOverlap())) { colIndex = prevData->GetColSpanOffset(); } AdjustForZeroSpan(aMap, rowIndex, colIndex); didZeroExpand = PR_TRUE; } break; } }   if (!didZeroExpand && (aColIndex > 0) && (aColIndex < numColsInTable)) { PRInt32 prevColX = aColIndex - 1;  for ( ; prevColX > 0; prevColX--) { CellData* prevData = GetMapCellAt(aMap, aMapRowIndex, prevColX, PR_FALSE); if (prevData) { if (prevData->IsZeroColSpan()) { PRInt32 colIndex = prevColX - prevData->GetColSpanOffset();  AdjustForZeroSpan(aMap, aMapRowIndex, colIndex); didZeroExpand = PR_TRUE; } break; } } }   if (!data && didZeroExpand) { data = GetMapCellAt(aMap, aMapRowIndex, aColIndex, PR_FALSE); } } return data;
inline CellData* nsCellMap::GetMapCellAt(PRInt32 aMapRowIndex,                                          PRInt32 aColIndex) const{  if ((0 > aMapRowIndex) || (aMapRowIndex >= mRows.Count()) ||       (0 > aColIndex) || (aColIndex >= mNumCellsInCol.Count())) {    //see bug 9024 comments above     //printf("%s \n", "nsCellMap::GetMapCellAt called with invalid row or col index"); // XXX look at this when bug 10911 get fixed    return nsnull;  }  CellData* result = nsnull;  nsVoidArray* row = (nsVoidArray *)(mRows.ElementAt(aMapRowIndex));  if (row)    result = (CellData *)(row->ElementAt(aColIndex));  return result;}