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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user