Replace some more uses of nsUInt32Array with nsTArray b=258018 r+sr=bienvenu

git-svn-id: svn://10.0.0.236/trunk@245581 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
neil%parkwaycc.co.uk
2008-02-13 10:47:16 +00:00
parent f1c5a677cd
commit 80f9143d4c
9 changed files with 102 additions and 98 deletions

View File

@@ -2035,7 +2035,7 @@ NS_IMETHODIMP nsMsgDBView::Close()
// row count, which get determine from the number of keys.
m_keys.RemoveAll();
// be consistent
m_flags.RemoveAll();
m_flags.Clear();
m_levels.Clear();
// clear these out since they no longer apply if we're switching a folder
@@ -2280,7 +2280,7 @@ NS_IMETHODIMP nsMsgDBView::DoCommand(nsMsgViewCommandTypeValue command)
nsMsgViewIndex numIndices = GetSize();
for (nsMsgViewIndex curIndex = 0; curIndex < numIndices; curIndex++)
{
if (m_flags.GetAt(curIndex) & MSG_FLAG_MARKED)
if (m_flags[curIndex] & MSG_FLAG_MARKED)
mTreeSelection->ToggleSelect(curIndex);
}
mTreeSelection->SetSelectEventsSuppressed(PR_FALSE);
@@ -2448,7 +2448,7 @@ nsMsgDBView::CopyMessages(nsIMsgWindow *window, nsMsgViewIndex *indices, PRInt32
messageArray->AppendElement(msgHdr);
// if we are deleting rows, save off the keys
if (m_deletingRows)
mIndicesToNoteChange.Add(indices[index]);
mIndicesToNoteChange.AppendElement(indices[index]);
}
}
@@ -2672,7 +2672,7 @@ nsresult nsMsgDBView::RemoveByIndex(nsMsgViewIndex index)
if (!IsValidIndex(index))
return NS_MSG_INVALID_DBVIEW_INDEX;
m_keys.RemoveAt(index);
m_flags.RemoveAt(index);
m_flags.RemoveElementAt(index);
m_levels.RemoveElementAt(index);
// the call to NoteChange() has to happen after we remove the key
@@ -2708,7 +2708,7 @@ nsresult nsMsgDBView::DeleteMessages(nsIMsgWindow *window, nsMsgViewIndex *indic
messageArray->AppendElement(msgHdr);
// if we are deleting rows, save off the keys
if (m_deletingRows)
mIndicesToNoteChange.Add(indices[index]);
mIndicesToNoteChange.AppendElement(indices[index]);
}
}
@@ -3147,7 +3147,7 @@ nsMsgDBView::DetermineActionsForJunkMsgs(PRBool* movingJunkMessages, PRBool* mar
// make a copy of each array and copy them over.
nsresult nsMsgDBView::ReverseThreads()
{
nsUInt32Array newFlagArray;
nsTArray<PRUint32> newFlagArray;
nsMsgKeyArray newKeyArray;
nsTArray<PRUint8> newLevelArray;
@@ -3155,7 +3155,7 @@ nsresult nsMsgDBView::ReverseThreads()
PRInt32 viewSize = GetSize();
newKeyArray.SetSize(m_keys.GetSize());
newFlagArray.SetSize(m_flags.GetSize());
newFlagArray.SetLength(m_flags.Length());
newLevelArray.SetLength(m_levels.Length());
for (sourceIndex = 0, destIndex = viewSize - 1; sourceIndex < viewSize;)
@@ -3164,7 +3164,7 @@ nsresult nsMsgDBView::ReverseThreads()
PRBool inExpandedThread = PR_FALSE;
for (endThread = sourceIndex; endThread < viewSize; endThread++)
{
PRUint32 flags = m_flags.GetAt(endThread);
PRUint32 flags = m_flags[endThread];
if (!inExpandedThread && (flags & (MSG_VIEW_FLAG_ISTHREAD|MSG_VIEW_FLAG_HASCHILDREN)) && !(flags & MSG_FLAG_ELIDED))
inExpandedThread = PR_TRUE;
else if (flags & MSG_VIEW_FLAG_ISTHREAD)
@@ -3181,7 +3181,7 @@ nsresult nsMsgDBView::ReverseThreads()
while (endThread >= sourceIndex)
{
newKeyArray.SetAt(destIndex, m_keys.GetAt(endThread));
newFlagArray.SetAt(destIndex, m_flags.GetAt(endThread));
newFlagArray[destIndex] = m_flags[endThread];
newLevelArray[destIndex] = m_levels[endThread];
endThread--;
destIndex--;
@@ -3192,7 +3192,7 @@ nsresult nsMsgDBView::ReverseThreads()
// just assign the new data ptrs to the old arrays and "forget" the new
// arrays' data ptrs, so they won't be freed when the arrays are deleted.
m_keys.CopyArray(newKeyArray);
m_flags.CopyArray(newFlagArray);
m_flags.SwapElements(newFlagArray);
m_levels.SwapElements(newLevelArray);
return NS_OK;
@@ -3210,9 +3210,9 @@ nsresult nsMsgDBView::ReverseSort()
{
// swap flags
PRUint32 end = num - i - 1;
PRUint32 tempFlags = m_flags.GetAt(i);
m_flags.SetAt(i, m_flags.GetAt(end));
m_flags.SetAt(end, tempFlags);
PRUint32 tempFlags = m_flags[i];
m_flags[i] = m_flags[end];
m_flags[end] = tempFlags;
// swap keys
nsMsgKey tempKey = m_keys.GetAt(i);
@@ -3973,7 +3973,7 @@ NS_IMETHODIMP nsMsgDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOr
IdKey *info = (IdKey*)pTemp;
pPtrBase[numSoFar] = info;
info->id = thisKey;
info->bits = m_flags.GetAt(numSoFar);
info->bits = m_flags[numSoFar];
info->dword = longValue;
//info->pad = 0;
@@ -4028,7 +4028,7 @@ NS_IMETHODIMP nsMsgDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOr
for (PRUint32 i = 0; i < numSoFar; i++)
{
m_keys.SetAt(i, pPtrBase[i]->id);
m_flags.SetAt(i, pPtrBase[i]->bits);
m_flags[i] = pPtrBase[i]->bits;
if (folders)
folders->SetElementAt(i, pPtrBase[i]->folder);
@@ -4489,8 +4489,8 @@ nsresult nsMsgDBView::CollapseByIndex(nsMsgViewIndex index, PRUint32 *pNumCollap
for (int i = 1; i <= threadCount && index + 1 < m_keys.GetSize(); i++)
{
m_keys.RemoveAt(index + 1);
m_flags.RemoveAt(index + 1);
}
m_flags.RemoveElementsAt(index + 1, threadCount);
m_levels.RemoveElementsAt(index + 1, threadCount);
if (pNumCollapsed != nsnull)
*pNumCollapsed = numRemoved;
@@ -4701,7 +4701,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr)
{
PRUint32 flags = 0;
#ifdef DEBUG_bienvenu
NS_ASSERTION((int) m_keys.GetSize() == m_flags.GetSize() && (int) m_keys.GetSize() == m_levels.Length(), "view arrays out of sync!");
NS_ASSERTION(m_keys.GetSize() == m_flags.Length() && m_keys.GetSize() == m_levels.Length(), "view arrays out of sync!");
#endif
if (!GetShowingIgnored())
@@ -4735,7 +4735,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr)
if (m_sortOrder == nsMsgViewSortOrder::ascending)
{
m_keys.Add(msgKey);
m_flags.Add(flags);
m_flags.AppendElement(flags);
m_levels.AppendElement(levelToAdd);
// the call to NoteChange() has to happen after we add the key
@@ -4745,7 +4745,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr)
else
{
m_keys.InsertAt(0, msgKey);
m_flags.InsertAt(0, flags);
m_flags.InsertElementAt(0, flags);
m_levels.InsertElementAt(0, levelToAdd);
// the call to NoteChange() has to happen after we insert the key
@@ -4757,7 +4757,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr)
else
{
m_keys.InsertAt(insertIndex, msgKey);
m_flags.InsertAt(insertIndex, flags);
m_flags.InsertElementAt(insertIndex, flags);
PRInt32 level = 0;
m_levels.InsertElementAt(insertIndex, level);
@@ -4829,7 +4829,7 @@ nsresult nsMsgDBView::ListIdsInThreadOrder(nsIMsgThread *threadHdr, nsMsgKey par
AdjustReadFlag(msgHdr, &msgFlags);
m_keys.SetAt(*viewIndex, msgKey);
// ### TODO - how about hasChildren flag?
m_flags.SetAt(*viewIndex, msgFlags & ~MSG_VIEW_FLAGS);
m_flags[*viewIndex] = msgFlags & ~MSG_VIEW_FLAGS;
// ### TODO this is going to be tricky - might use enumerators
m_levels[*viewIndex] = level;
// turn off thread or elided bit if they got turned on (maybe from new only view?)
@@ -4855,7 +4855,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st
threadHdr->GetNumChildren(&numChildren);
numChildren--; // account for the existing thread root
m_keys.InsertAt(viewIndex, 0, numChildren);
m_flags.InsertAt(viewIndex, 0, numChildren);
m_flags.InsertElementsAt(viewIndex, numChildren, 0);
m_levels.InsertElementsAt(viewIndex, numChildren, 1); // default unthreaded level
// ### need to rework this when we implemented threading in group views.
@@ -4879,7 +4879,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st
msgHdr->GetFlags(&msgFlags);
AdjustReadFlag(msgHdr, &msgFlags);
m_keys.SetAt(viewIndex, msgKey);
m_flags.SetAt(viewIndex, msgFlags & ~MSG_VIEW_FLAGS);
m_flags[viewIndex] = msgFlags & ~MSG_VIEW_FLAGS;
// here, we're either flat, or we're grouped - in either case, level is 1
// turn off thread or elided bit if they got turned on (maybe from new only view?)
if (i > 0)
@@ -4893,7 +4893,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st
{
NS_NOTREACHED("thread corrupt in db");
m_keys.RemoveAt(viewIndex, numChildren - *pNumListed);
m_flags.RemoveAt(viewIndex, numChildren - *pNumListed);
m_flags.RemoveElementsAt(viewIndex, numChildren - *pNumListed);
m_levels.RemoveElementsAt(viewIndex, numChildren - *pNumListed);
// if we've listed fewer messages than are in the thread, then the db
// is corrupt, and we should invalidate it.
@@ -4978,7 +4978,7 @@ nsresult nsMsgDBView::ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIn
if (msgKey != topLevelMsgKey)
{
m_keys.InsertAt(viewIndex, msgKey);
m_flags.InsertAt(viewIndex, msgFlags);
m_flags.InsertElementAt(viewIndex, msgFlags);
levelToAdd = FindLevelInThread(msgHdr, startOfThreadViewIndex, viewIndex);
m_levels.InsertElementAt(viewIndex, levelToAdd);
viewIndex++;
@@ -5064,7 +5064,7 @@ NS_IMETHODIMP nsMsgDBView::OnAnnouncerGoingAway(nsIDBChangeAnnouncer *instigator
// row count, which get determine from the number of keys.
m_keys.RemoveAll();
// be consistent
m_flags.RemoveAll();
m_flags.Clear();
m_levels.Clear();
// tell the tree all the rows have gone away
@@ -5235,7 +5235,7 @@ nsresult nsMsgDBView::MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex thr
{
PRBool threadElided = PR_TRUE;
if (threadIndex != nsMsgViewIndex_None)
threadElided = (m_flags.GetAt(threadIndex) & MSG_FLAG_ELIDED);
threadElided = (m_flags[threadIndex] & MSG_FLAG_ELIDED);
PRUint32 numChildren;
threadHdr->GetNumChildren(&numChildren);
@@ -5369,7 +5369,7 @@ nsresult nsMsgDBView::NavigateFromPos(nsMsgNavigationTypeValue motion, nsMsgView
startIndex = nsMsgViewIndex_None; // note fall thru - is this motion ever used?
case nsMsgNavigationType::nextUnreadMessage:
for (curIndex = (startIndex == nsMsgViewIndex_None) ? 0 : startIndex; curIndex <= lastIndex && lastIndex != nsMsgViewIndex_None; curIndex++) {
PRUint32 flags = m_flags.GetAt(curIndex);
PRUint32 flags = m_flags[curIndex];
// don't return start index since navigate should move
if (!(flags & (MSG_FLAG_READ | MSG_VIEW_FLAG_DUMMY)) && (curIndex != startIndex))
@@ -5638,7 +5638,7 @@ nsresult nsMsgDBView::FindNextFlagged(nsMsgViewIndex startIndex, nsMsgViewIndex
{
for (curIndex = startIndex; curIndex <= lastIndex; curIndex++)
{
PRUint32 flags = m_flags.GetAt(curIndex);
PRUint32 flags = m_flags[curIndex];
if (flags & MSG_FLAG_MARKED)
{
*pResultIndex = curIndex;
@@ -5678,7 +5678,7 @@ nsresult nsMsgDBView::FindPrevUnread(nsMsgKey startKey, nsMsgKey *pResultKey,
for (; (int) curIndex >= 0 && (*pResultKey == nsMsgKey_None); curIndex--)
{
PRUint32 flags = m_flags.GetAt(curIndex);
PRUint32 flags = m_flags[curIndex];
if (curIndex != startIndex && flags & MSG_VIEW_FLAG_ISTHREAD && flags & MSG_FLAG_ELIDED)
{
@@ -5720,7 +5720,7 @@ nsresult nsMsgDBView::FindPrevFlagged(nsMsgViewIndex startIndex, nsMsgViewIndex
if (curIndex != 0)
curIndex--;
PRUint32 flags = m_flags.GetAt(curIndex);
PRUint32 flags = m_flags[curIndex];
if (flags & MSG_FLAG_MARKED)
{
*pResultIndex = curIndex;
@@ -6040,13 +6040,13 @@ nsMsgDBView::OnDeleteCompleted(PRBool aSucceeded)
{
if (aSucceeded)
{
PRUint32 numIndices = mIndicesToNoteChange.GetSize();
PRUint32 numIndices = mIndicesToNoteChange.Length();
if (numIndices)
{
if (mTree)
{
if (numIndices > 1)
mIndicesToNoteChange.QuickSort(CompareViewIndices);
mIndicesToNoteChange.Sort();
// the call to NoteChange() has to happen after we are done removing the keys
// as NoteChange() will call RowCountChanged() which will call our GetRowCount()
@@ -6057,7 +6057,7 @@ nsMsgDBView::OnDeleteCompleted(PRBool aSucceeded)
if (numIndices > 1)
mTree->EndUpdateBatch();
}
mIndicesToNoteChange.RemoveAll();
mIndicesToNoteChange.Clear();
}
}
}
@@ -6081,7 +6081,7 @@ PRBool nsMsgDBView::OfflineMsgSelected(nsMsgViewIndex * indices, PRInt32 numIndi
for (nsMsgViewIndex index = 0; index < (nsMsgViewIndex) numIndices; index++)
{
PRUint32 flags = m_flags.GetAt(indices[index]);
PRUint32 flags = m_flags[indices[index]];
if ((flags & MSG_FLAG_OFFLINE))
return PR_TRUE;
}
@@ -6092,7 +6092,7 @@ PRBool nsMsgDBView::NonDummyMsgSelected(nsMsgViewIndex * indices, PRInt32 numInd
{
for (nsMsgViewIndex index = 0; index < (nsMsgViewIndex) numIndices; index++)
{
PRUint32 flags = m_flags.GetAt(indices[index]);
PRUint32 flags = m_flags[indices[index]];
if (!(flags & MSG_VIEW_FLAG_DUMMY))
return PR_TRUE;
}
@@ -6319,7 +6319,7 @@ nsresult nsMsgDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMess
aNewMsgDBView->mShowSizeInLines = mShowSizeInLines;
aNewMsgDBView->mHeaderParser = mHeaderParser;
aNewMsgDBView->mDeleteModel = mDeleteModel;
aNewMsgDBView->m_flags.CopyArray(m_flags);
aNewMsgDBView->m_flags = m_flags;
aNewMsgDBView->m_levels = m_levels;
aNewMsgDBView->m_keys.CopyArray(m_keys);

View File

@@ -349,7 +349,7 @@ protected:
void FreeAll(nsVoidArray *ptrs);
void ClearHdrCache();
nsMsgKeyArray m_keys;
nsUInt32Array m_flags;
nsTArray<PRUint32> m_flags;
nsTArray<PRUint8> m_levels;
nsMsgImapDeleteModel mDeleteModel;
@@ -411,7 +411,7 @@ protected:
nsMsgViewIndex *mJunkIndices;
PRUint32 mNumJunkIndices;
nsUInt32Array mIndicesToNoteChange;
nsTArray<PRUint32> mIndicesToNoteChange;
// the saved search views keep track of the XX most recently deleted msg ids, so that if the
// delete is undone, we can add the msg back to the search results, even if it no longer

View File

@@ -326,7 +326,7 @@ nsMsgGroupThread *nsMsgGroupView::AddHdrToThread(nsIMsgDBHdr *msgHdr, PRBool *pN
if (insertIndex == nsMsgViewIndex_None)
insertIndex = m_keys.GetSize();
m_keys.InsertAt(insertIndex, msgKey);
m_flags.InsertAt(insertIndex, msgFlags | MSG_VIEW_FLAG_ISTHREAD | MSG_FLAG_ELIDED);
m_flags.InsertElementAt(insertIndex, msgFlags | MSG_VIEW_FLAG_ISTHREAD | MSG_FLAG_ELIDED);
m_levels.InsertElementAt(insertIndex, 0);
// if grouped by date, insert dummy header for "age"
if (GroupViewUsesDummyRow())
@@ -434,7 +434,7 @@ nsresult nsMsgGroupView::HandleDayChange()
// row count, which get determine from the number of keys.
m_keys.RemoveAll();
// be consistent
m_flags.RemoveAll();
m_flags.Clear();
m_levels.Clear();
// this needs to happen after we remove all the keys, since RowCountChanged() will call our GetRowCount()
@@ -514,7 +514,7 @@ nsresult nsMsgGroupView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentKey, P
}
m_keys.InsertAt(threadIndex + msgIndexInThread, msgKey);
m_flags.InsertAt(threadIndex + msgIndexInThread, msgFlags);
m_flags.InsertElementAt(threadIndex + msgIndexInThread, msgFlags);
if (msgIndexInThread > 0)
{
m_levels.InsertElementAt(threadIndex + msgIndexInThread, 1);
@@ -587,7 +587,7 @@ NS_IMETHODIMP nsMsgGroupView::OnHdrDeleted(nsIMsgDBHdr *aHdrDeleted, nsMsgKey aP
{
nsMsgDBView::RemoveByIndex(viewIndexOfThread - 1);
if (m_deletingRows)
mIndicesToNoteChange.Add(viewIndexOfThread - 1);
mIndicesToNoteChange.AppendElement(viewIndexOfThread - 1);
}
}
else if (rootDeleted && viewIndexOfThread > 0)

View File

@@ -307,7 +307,7 @@ nsMsgQuickSearchDBView::OnNewSearch()
m_keys.RemoveAll();
m_levels.Clear();
m_flags.RemoveAll();
m_flags.Clear();
m_hdrHits.Clear();
// this needs to happen after we remove all the keys, since RowCountChanged() will call our GetRowCount()
if (mTree)
@@ -454,7 +454,7 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns
}
m_keys.RemoveAll();
m_levels.Clear();
m_flags.RemoveAll();
m_flags.Clear();
// now we've build up the list of thread ids - need to build the view
// from that. So for each thread id, we need to list the messages in the thread.
PRUint32 numThreads = threadRootIds.GetSize();
@@ -476,7 +476,7 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns
displayRootHdr->GetFlags(&rootFlags);
rootFlags |= MSG_VIEW_FLAG_ISTHREAD;
m_keys.Add(rootKey);
m_flags.Add(rootFlags);
m_flags.AppendElement(rootFlags);
m_levels.AppendElement(0);
nsMsgViewIndex startOfThreadViewIndex = m_keys.GetSize() - 1;
@@ -519,11 +519,11 @@ nsresult nsMsgQuickSearchDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsg
msgHdr->GetFlags(&childFlags);
PRUint8 levelToAdd;
m_keys.InsertAt(viewIndex, msgKey);
m_flags.InsertAt(viewIndex, childFlags);
m_flags.InsertElementAt(viewIndex, childFlags);
if (! (rootFlags & MSG_VIEW_FLAG_HASCHILDREN))
{
rootFlags |= MSG_VIEW_FLAG_HASCHILDREN;
m_flags.SetAt(startOfThreadViewIndex, rootFlags);
m_flags[startOfThreadViewIndex] = rootFlags;
}
levelToAdd = FindLevelInThread(msgHdr, startOfThreadViewIndex, viewIndex);
m_levels.InsertElementAt(viewIndex, levelToAdd);

View File

@@ -48,6 +48,7 @@
#include "nsMsgUtils.h"
#include "nsITreeColumns.h"
#include "nsIMsgMessageService.h"
#include "nsAutoPtr.h"
nsMsgSearchDBView::nsMsgSearchDBView()
{
@@ -110,8 +111,6 @@ nsMsgSearchDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMesseng
m_dbToUseList[i]->AddListener(newMsgDBView);
}
// nsUInt32Array* mTestIndices;
return NS_OK;
}
@@ -193,7 +192,7 @@ nsresult nsMsgSearchDBView::AddHdrFromFolder(nsIMsgDBHdr *msgHdr, nsISupports *f
msgHdr->GetFlags(&msgFlags);
m_keys.Add(msgKey);
m_levels.AppendElement(0);
m_flags.Add(msgFlags);
m_flags.AppendElement(msgFlags);
// this needs to be called after we add the key, since RowCountChanged() will call our GetRowCount()
if (mTree)
@@ -253,7 +252,7 @@ nsMsgSearchDBView::OnNewSearch()
m_folders->Clear();
m_keys.RemoveAll();
m_levels.Clear();
m_flags.RemoveAll();
m_flags.Clear();
// needs to happen after we remove the keys, since RowCountChanged() will call our GetRowCount()
if (mTree)
@@ -317,13 +316,13 @@ NS_IMETHODIMP nsMsgSearchDBView::DoCommand(nsMsgViewCommandTypeValue command)
// ApplyCommandToIndices with the command and the indices in the
// selection that are from that folder.
nsUInt32Array *indexArrays;
nsAutoArrayPtr<nsTArray<PRUint32> > indexArrays;
PRInt32 numArrays;
rv = PartitionSelectionByFolder(indices, numIndices, &indexArrays, &numArrays);
rv = PartitionSelectionByFolder(indices, numIndices, getter_Transfers(indexArrays), &numArrays);
NS_ENSURE_SUCCESS(rv, rv);
for (PRInt32 folderIndex = 0; folderIndex < numArrays; folderIndex++)
{
rv = ApplyCommandToIndices(command, indexArrays[folderIndex].GetData(), indexArrays[folderIndex].GetSize());
rv = ApplyCommandToIndices(command, indexArrays[folderIndex].Elements(), indexArrays[folderIndex].Length());
NS_ENSURE_SUCCESS(rv, rv);
}
@@ -378,38 +377,45 @@ nsMsgSearchDBView::CopyMessages(nsIMsgWindow *window, nsMsgViewIndex *indices, P
}
nsresult
nsMsgSearchDBView::PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsUInt32Array **indexArrays, PRInt32 *numArrays)
nsMsgSearchDBView::PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsTArray<PRUint32> **indexArrays, PRInt32 *numArrays)
{
nsresult rv = NS_OK;
nsCOMPtr <nsISupportsArray> uniqueFoldersSelected = do_CreateInstance(NS_SUPPORTSARRAY_CONTRACTID, &rv);
nsMsgViewIndex i;
PRInt32 folderIndex;
nsCOMArray<nsISupports> uniqueFoldersSelected;
nsTArray<PRUint32> numIndicesSelected;
mCurIndex = 0;
//Build unique folder list based on headers selected by the user
for (nsMsgViewIndex i = 0; i < (nsMsgViewIndex) numIndices; i++)
for (i = 0; i < (nsMsgViewIndex) numIndices; i++)
{
nsCOMPtr <nsISupports> curSupports = getter_AddRefs(m_folders->ElementAt(indices[i]));
if ( uniqueFoldersSelected->IndexOf(curSupports) < 0)
uniqueFoldersSelected->AppendElement(curSupports);
nsCOMPtr <nsISupports> curSupports = dont_AddRef(m_folders->ElementAt(indices[i]));
folderIndex = uniqueFoldersSelected.IndexOf(curSupports);
if (folderIndex < 0)
{
uniqueFoldersSelected.AppendObject(curSupports);
numIndicesSelected.AppendElement(1);
}
else
{
numIndicesSelected[folderIndex]++;
}
}
PRUint32 numFolders =0;
rv = uniqueFoldersSelected->Count(&numFolders); //group the headers selected by each folder
*indexArrays = new nsUInt32Array[numFolders];
PRInt32 numFolders = uniqueFoldersSelected.Count();
*indexArrays = new nsTArray<PRUint32>[numFolders];
*numArrays = numFolders;
NS_ENSURE_TRUE(*indexArrays, NS_ERROR_OUT_OF_MEMORY);
for (PRUint32 folderIndex=0; folderIndex < numFolders; folderIndex++)
for (folderIndex = 0; folderIndex < numFolders; folderIndex++)
{
nsCOMPtr <nsIMsgFolder> curFolder =
do_QueryElementAt(uniqueFoldersSelected, folderIndex, &rv);
for (nsMsgViewIndex i = 0; i < (nsMsgViewIndex) numIndices; i++)
{
nsCOMPtr <nsIMsgFolder> msgFolder = do_QueryElementAt(m_folders,
indices[i], &rv);
if (NS_SUCCEEDED(rv) && msgFolder && msgFolder == curFolder)
(*indexArrays)[folderIndex].Add(indices[i]);
}
(*indexArrays)[folderIndex].SetCapacity(numIndicesSelected[folderIndex]);
}
return rv;
for (i = 0; i < (nsMsgViewIndex) numIndices; i++)
{
nsCOMPtr <nsISupports> curSupports = getter_AddRefs(m_folders->ElementAt(indices[i]));
PRInt32 folderIndex = uniqueFoldersSelected.IndexOf(curSupports);
(*indexArrays)[folderIndex].AppendElement(indices[i]);
}
return NS_OK;
}

View File

@@ -84,7 +84,7 @@ protected:
virtual nsresult DeleteMessages(nsIMsgWindow *window, nsMsgViewIndex *indices, PRInt32 numIndices, PRBool deleteStorage);
nsresult GetFoldersAndHdrsForSelection(nsMsgViewIndex *indices, PRInt32 numIndices);
nsresult GroupSearchResultsByFolder();
nsresult PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsUInt32Array **indexArrays, PRInt32 *numArrays);
nsresult PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsTArray<PRUint32> **indexArrays, PRInt32 *numArrays);
virtual nsresult ApplyCommandToIndicesWithFolder(nsMsgViewCommandTypeValue command, nsMsgViewIndex* indices,
PRInt32 numIndices, nsIMsgFolder *destFolder);

View File

@@ -103,9 +103,9 @@ NS_IMETHODIMP nsMsgThreadedDBView::Open(nsIMsgFolder *folder, nsMsgViewSortTypeV
PRInt32 unreadMsgsInView = 0;
if (!(m_viewFlags & nsMsgViewFlagsType::kThreadedDisplay))
{
for (PRInt32 i = 0; i < m_flags.GetSize(); i++)
for (PRInt32 i = 0; i < m_flags.Length(); i++)
{
if (! (m_flags.GetAt(i) & MSG_FLAG_READ))
if (! (m_flags[i] & MSG_FLAG_READ))
unreadMsgsInView++;
}
if (unreadMessages != unreadMsgsInView)
@@ -126,10 +126,10 @@ nsresult nsMsgThreadedDBView::InitThreadedView(PRInt32 *pCount)
nsresult rv;
m_keys.RemoveAll();
m_flags.RemoveAll();
m_flags.Clear();
m_levels.Clear();
m_prevKeys.RemoveAll();
m_prevFlags.RemoveAll();
m_prevFlags.Clear();
m_prevLevels.Clear();
m_havePrevView = PR_FALSE;
nsresult getSortrv = NS_OK; // ### TODO m_db->GetSortInfo(&sortType, &sortOrder);
@@ -187,7 +187,7 @@ nsresult nsMsgThreadedDBView::SortThreads(nsMsgViewSortTypeValue sortType, nsMsg
}
}
m_keys.SetSize(numThreads);
m_flags.SetSize(numThreads);
m_flags.SetLength(numThreads);
m_levels.SetLength(numThreads);
//m_viewFlags &= ~nsMsgViewFlagsType::kThreadedDisplay;
m_sortType = nsMsgViewSortType::byNone; // sort from scratch
@@ -239,7 +239,7 @@ nsresult nsMsgThreadedDBView::AddKeys(nsMsgKey *pKeys, PRInt32 *pFlags, const ch
PRInt32 numAdded = 0;
// Allocate enough space first to avoid memory allocation/deallocation.
m_keys.AllocateSpace(numKeysToAdd+m_keys.GetSize());
m_flags.AllocateSpace(numKeysToAdd+m_flags.GetSize());
m_flags.SetCapacity(m_flags.Length() + numKeysToAdd);
m_levels.SetCapacity(m_levels.Length() + numKeysToAdd);
for (PRInt32 i = 0; i < numKeysToAdd; i++)
{
@@ -256,7 +256,7 @@ nsresult nsMsgThreadedDBView::AddKeys(nsMsgKey *pKeys, PRInt32 *pFlags, const ch
// should this be persistent? Doesn't seem to need to be.
flag |= MSG_VIEW_FLAG_ISTHREAD;
m_keys.Add(pKeys[i]);
m_flags.Add(flag);
m_flags.AppendElement(flag);
m_levels.AppendElement(pLevels[i]);
numAdded++;
// we expand as we build the view, which allows us to insert at the end of the key array,
@@ -309,8 +309,7 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi
// restore saved id array and flags array
m_keys.RemoveAll();
m_keys.InsertAt(0, &m_prevKeys);
m_flags.RemoveAll();
m_flags.InsertAt(0, &m_prevFlags);
m_flags = m_prevFlags;
m_levels = m_prevLevels;
m_sortValid = PR_TRUE;
@@ -354,15 +353,14 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi
// going from SortByThread to non-thread sort - must build new key, level,and flags arrays
m_prevKeys.RemoveAll();
m_prevKeys.InsertAt(0, &m_keys);
m_prevFlags.RemoveAll();
m_prevFlags.InsertAt(0, &m_flags);
m_prevFlags = m_flags;
m_prevLevels = m_levels;
// do this before we sort, so that we'll use the cheap method
// of expanding.
m_viewFlags &= ~(nsMsgViewFlagsType::kThreadedDisplay | nsMsgViewFlagsType::kGroupBySort);
ExpandAll();
// m_idArray.RemoveAll();
// m_flags.RemoveAll();
// m_flags.Clear();
m_havePrevView = PR_TRUE;
}
}
@@ -507,7 +505,7 @@ void nsMsgThreadedDBView::OnExtraFlagChanged(nsMsgViewIndex index, PRUint32 extr
nsMsgViewIndex prevViewIndex = m_prevKeys.FindIndex(keyChanged);
if (prevViewIndex != nsMsgViewIndex_None)
{
PRUint32 prevFlag = m_prevFlags.GetAt(prevViewIndex);
PRUint32 prevFlag = m_prevFlags[prevViewIndex];
// don't want to change the elided bit, or has children or is thread
if (prevFlag & MSG_FLAG_ELIDED)
extraFlag |= MSG_FLAG_ELIDED;
@@ -521,7 +519,7 @@ void nsMsgThreadedDBView::OnExtraFlagChanged(nsMsgViewIndex index, PRUint32 extr
extraFlag |= MSG_VIEW_FLAG_HASCHILDREN;
else
extraFlag &= ~MSG_VIEW_FLAG_HASCHILDREN;
m_prevFlags.SetAt(prevViewIndex, extraFlag); // will this be right?
m_prevFlags[prevViewIndex] = extraFlag; // will this be right?
}
}
}
@@ -541,7 +539,7 @@ void nsMsgThreadedDBView::ClearPrevIdArray()
{
m_prevKeys.RemoveAll();
m_prevLevels.Clear();
m_prevFlags.RemoveAll();
m_prevFlags.Clear();
m_havePrevView = PR_FALSE;
}
@@ -627,7 +625,7 @@ nsresult nsMsgThreadedDBView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentK
insertIndex = GetInsertInfoForNewHdr(newHdr, parentIndex, level);
}
m_keys.InsertAt(insertIndex, newKey);
m_flags.InsertAt(insertIndex, newFlags, 1);
m_flags.InsertElementAt(insertIndex, newFlags);
m_levels.InsertElementAt(insertIndex, level);
// the call to NoteChange() has to happen after we add the key
@@ -767,7 +765,7 @@ nsresult nsMsgThreadedDBView::RemoveByIndex(nsMsgViewIndex index)
msgHdr->GetFlags(&flag);
if (numThreadChildren > 1)
flag |= MSG_VIEW_FLAG_ISTHREAD | MSG_VIEW_FLAG_HASCHILDREN;
m_flags.SetAtGrow(index, flag);
m_flags[index] = flag;
m_levels[index] = 0;
}
}

View File

@@ -78,7 +78,7 @@ protected:
// between two views is quick (e.g., threaded and flat sorted by date).
PRBool m_havePrevView;
nsMsgKeyArray m_prevKeys; //this is used for caching non-threaded view.
nsUInt32Array m_prevFlags;
nsTArray<PRUint32> m_prevFlags;
nsTArray<PRUint8> m_prevLevels;
nsCOMPtr <nsISimpleEnumerator> m_threadEnumerator;
};

View File

@@ -161,7 +161,7 @@ nsresult nsMsgXFVirtualFolderDBView::InsertHdrFromFolder(nsIMsgDBHdr *msgHdr, ns
msgHdr->GetMessageKey(&msgKey);
msgHdr->GetFlags(&msgFlags);
m_keys.InsertAt(insertIndex, msgKey);
m_flags.InsertAt(insertIndex, msgFlags);
m_flags.InsertElementAt(insertIndex, msgFlags);
m_folders->InsertElementAt(folder, insertIndex);
m_levels.InsertElementAt(insertIndex, 0);
@@ -293,7 +293,7 @@ nsMsgXFVirtualFolderDBView::OnSearchDone(nsresult status)
// folder - easier than trying to keep the count up to date in the face of
// search hits coming in while the user is reading/deleting messages.
PRInt32 numUnread = 0;
for (PRInt32 i = 0; i < m_flags.GetSize(); i++)
for (PRUint32 i = 0; i < m_flags.Length(); i++)
if (!(m_flags[i] & MSG_FLAG_READ))
numUnread++;
dbFolderInfo->SetNumUnreadMessages(numUnread);
@@ -323,7 +323,7 @@ nsMsgXFVirtualFolderDBView::OnNewSearch()
m_folders->Clear();
m_keys.RemoveAll();
m_levels.Clear();
m_flags.RemoveAll();
m_flags.Clear();
// needs to happen after we remove the keys, since RowCountChanged() will call our GetRowCount()
if (mTree)