nsIRDFDataSource* ds = NS_STATIC_CAST(nsIRDFDataSource*, PL_HashTableLookup(mNamedDataSources, uri));
PLHashEntry** hep = PL_HashTableRawLookup(mNamedDataSources, (*mNamedDataSources->keyHash)(uri), uri);
ServiceImpl::RegisterDataSource(nsIRDFDataSource* aDataSource, PRBool replace){    NS_PRECONDITION(aDataSource != nsnull, "null ptr");    if (! aDataSource)        return NS_ERROR_NULL_POINTER;    nsresult rv;    nsXPIDLCString uri;    rv = aDataSource->GetURI(getter_Copies(uri));    if (NS_FAILED(rv)) return rv;    nsIRDFDataSource* ds =        NS_STATIC_CAST(nsIRDFDataSource*, PL_HashTableLookup(mNamedDataSources, uri));    if (ds) {        if (replace)            NS_RELEASE(ds);        else            return NS_ERROR_FAILURE;    // already registered    }    const char* key = PL_strdup(uri);    if (! key)        return NS_ERROR_OUT_OF_MEMORY;    PL_HashTableAdd(mNamedDataSources, key, aDataSource);    return NS_OK;}