NS_COM nsIAtom* NS_NewAtom( const nsAReadableString& aString )
NS_COM nsIAtom* NS_NewAtom( const PRUnichar* str )
NS_COM nsIAtom* NS_NewAtom( const nsAReadableString& aString ){  if ( !gAtomHashTable )    gAtomHashTable = PL_NewHashTable(2048, (PLHashFunction)HashKey,                                     (PLHashComparator)CompareKeys,                                     (PLHashComparator)0, 0, 0);  const nsPromiseFlatString& flat = PromiseFlatString(aString);  const PRUnichar *str = flat.get();  PRUint32 hashCode = HashKey(str);  PLHashEntry** hep = PL_HashTableRawLookup(gAtomHashTable, hashCode, str);  PLHashEntry*  he  = *hep;  AtomImpl* id;  if ( he ) {      // if we found one, great    id = NS_STATIC_CAST(AtomImpl*, he->value);  } else {      // otherwise, we'll make a new atom    id = new (aString) AtomImpl();    if ( id ) {      PL_HashTableRawAdd(gAtomHashTable, hep, hashCode, id->mString, id);    }  }  NS_IF_ADDREF(id);  return id;}