NS_PRECONDITION(aOldSource != nsnull, "null ptr"); if (! aOldSource) return NS_ERROR_NULL_POINTER;  NS_PRECONDITION(aNewSource != nsnull, "null ptr"); if (! aNewSource) return NS_ERROR_NULL_POINTER;  NS_PRECONDITION(aProperty != nsnull, "null ptr"); if (! aProperty) return NS_ERROR_NULL_POINTER;  NS_PRECONDITION(aTarget != nsnull, "null ptr"); if (! aTarget) return NS_ERROR_NULL_POINTER;
InMemoryDataSource::Move(nsIRDFResource* aOldSource,                         nsIRDFResource* aNewSource,                         nsIRDFResource* aProperty,                         nsIRDFNode* aTarget){    nsresult rv;    {        NS_AUTOLOCK(mLock);        // XXX We can implement LockedMove() if we decide that this        // is a performance bottleneck.        rv = LockedUnassert(aOldSource, aProperty, aTarget);        if (NS_FAILED(rv)) return rv;        rv = LockedAssert(aNewSource, aProperty, aTarget, PR_TRUE);        if (NS_FAILED(rv)) return rv;    }    // Notify the world    if (mObservers) {        PRUint32 count;        rv = mObservers->Count(&count);        if (NS_FAILED(rv)) return rv;        for (PRInt32 i = PRInt32(count) - 1; i >= 0; --i) {            nsIRDFObserver* obs = (nsIRDFObserver*) mObservers->ElementAt(i);            obs->OnMove(aOldSource, aNewSource, aProperty, aTarget);            NS_RELEASE(obs);            // XXX ignore return value?        }    }    return NS_RDF_ASSERTION_ACCEPTED;}