Bug 316414 part 1, try #2 - Add xpcom-shutdown-threads and xpcom-shutdown-loaders notifications, r=darin

Original committer: bsmedberg%covad.net
Original revision: 1.10
Original date: 2005/11/30 18:51:27
This commit is contained in:
benjamin@smedbergs.us
2006-08-08 17:08:58 +00:00
parent 4f8cc11db2
commit b2ab57134c

View File

@@ -112,7 +112,8 @@ public:
}
// specialized operator to make sure we make room for mValues
void* operator new (size_t size, const nsCOMArray_base& aArray) CPP_THROW_NEW;
void* operator new (size_t size, const nsCOMArray_base& aArray,
PRBool aReverse) CPP_THROW_NEW;
void operator delete(void* ptr) {
::operator delete(ptr);
}
@@ -172,7 +173,8 @@ nsCOMArrayEnumerator::GetNext(nsISupports** aResult)
}
void*
nsCOMArrayEnumerator::operator new (size_t size, const nsCOMArray_base& aArray)
nsCOMArrayEnumerator::operator new (size_t size, const nsCOMArray_base& aArray,
PRBool aReverse)
CPP_THROW_NEW
{
// create enough space such that mValueArray points to a large
@@ -184,15 +186,20 @@ nsCOMArrayEnumerator::operator new (size_t size, const nsCOMArray_base& aArray)
nsCOMArrayEnumerator * result =
NS_STATIC_CAST(nsCOMArrayEnumerator*, ::operator new(size));
if (!result)
return result;
// now need to copy over the values, and addref each one
// now this might seem like a lot of work, but we're actually just
// doing all our AddRef's ahead of time since GetNext() doesn't
// need to AddRef() on the way out
PRUint32 i;
PRUint32 max = result->mArraySize = aArray.Count();
for (i = 0; i<max; i++) {
result->mValueArray[i] = aArray[i];
NS_IF_ADDREF(result->mValueArray[i]);
PRUint32 cur = aReverse ? max - 1 : 0;
PRUint32 incr = aReverse ? -1 : 1;
for (PRUint32 i = 0; i < max; ++i, cur += incr) {
result->mValueArray[cur] = aArray[i];
NS_IF_ADDREF(result->mValueArray[cur]);
}
return result;
@@ -200,9 +207,11 @@ nsCOMArrayEnumerator::operator new (size_t size, const nsCOMArray_base& aArray)
extern NS_COM nsresult
NS_NewArrayEnumerator(nsISimpleEnumerator* *aResult,
const nsCOMArray_base& aArray)
const nsCOMArray_base& aArray,
PRBool aReverse)
{
nsCOMArrayEnumerator *enumerator = new (aArray) nsCOMArrayEnumerator();
nsCOMArrayEnumerator *enumerator =
new (aArray, aReverse) nsCOMArrayEnumerator();
if (!enumerator) return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*aResult = enumerator);