use xpcom;s nsVoidPtrHashKey, r=aaronlev, sr=neil

This commit is contained in:
surkov.alexander@gmail.com 2007-07-13 20:09:42 -07:00
Родитель 14c5b93122
Коммит 1c3394d768
5 изменённых файлов: 21 добавлений и 40 удалений

Просмотреть файл

@ -87,7 +87,7 @@ nsIDOMNode *nsAccessNode::gLastFocusedNode = 0;
PRBool nsAccessNode::gIsAccessibilityActive = PR_FALSE;
PRBool nsAccessNode::gIsCacheDisabled = PR_FALSE;
PRBool nsAccessNode::gIsFormFillEnabled = PR_FALSE;
nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> nsAccessNode::gGlobalDocAccessibleCache;
nsAccessNodeHashtable nsAccessNode::gGlobalDocAccessibleCache;
nsApplicationAccessibleWrap *nsAccessNode::gApplicationAccessible = nsnull;
@ -762,9 +762,10 @@ nsAccessNode::GetDOMNodeForContainer(nsISupports *aContainer)
return node;
}
void nsAccessNode::PutCacheEntry(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> &aCache,
void* aUniqueID,
nsIAccessNode *aAccessNode)
void
nsAccessNode::PutCacheEntry(nsAccessNodeHashtable& aCache,
void* aUniqueID,
nsIAccessNode *aAccessNode)
{
#ifdef DEBUG_A11Y
nsCOMPtr<nsIAccessNode> oldAccessNode;
@ -774,9 +775,10 @@ void nsAccessNode::PutCacheEntry(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNo
aCache.Put(aUniqueID, aAccessNode);
}
void nsAccessNode::GetCacheEntry(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> &aCache,
void* aUniqueID,
nsIAccessNode **aAccessNode)
void
nsAccessNode::GetCacheEntry(nsAccessNodeHashtable& aCache,
void* aUniqueID,
nsIAccessNode **aAccessNode)
{
aCache.Get(aUniqueID, aAccessNode); // AddRefs for us
}
@ -789,7 +791,8 @@ PLDHashOperator nsAccessNode::ClearCacheEntry(const void* aKey, nsCOMPtr<nsIAcce
return PL_DHASH_REMOVE;
}
void nsAccessNode::ClearCache(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> &aCache)
void
nsAccessNode::ClearCache(nsAccessNodeHashtable& aCache)
{
aCache.Enumerate(ClearCacheEntry, nsnull);
}

Просмотреть файл

@ -69,30 +69,8 @@ class nsApplicationAccessibleWrap;
#define ACCESSIBLE_BUNDLE_URL "chrome://global-platform/locale/accessible.properties"
#define PLATFORM_KEYS_BUNDLE_URL "chrome://global-platform/locale/platformKeys.properties"
/* hashkey wrapper using void* KeyType
*
* @see nsTHashtable::EntryType for specification
*/
class nsVoidHashKey : public PLDHashEntryHdr
{
public:
typedef const void* KeyType;
typedef const void* KeyTypePointer;
nsVoidHashKey(KeyTypePointer aKey) : mValue(aKey) { }
nsVoidHashKey(const nsVoidHashKey& toCopy) : mValue(toCopy.mValue) { }
~nsVoidHashKey() { }
KeyType GetKey() const { return mValue; }
PRBool KeyEquals(KeyTypePointer aKey) const { return aKey == mValue; }
static KeyTypePointer KeyToPointer(KeyType aKey) { return aKey; }
static PLDHashNumber HashKey(KeyTypePointer aKey) { return NS_PTR_TO_INT32(aKey) >> 2; }
enum { ALLOW_MEMMOVE = PR_TRUE };
private:
const void* mValue;
};
typedef nsInterfaceHashtable<nsVoidPtrHashKey, nsIAccessNode>
nsAccessNodeHashtable;
class nsAccessNode: public nsIAccessNode, public nsPIAccessNode
{
@ -113,11 +91,11 @@ class nsAccessNode: public nsIAccessNode, public nsPIAccessNode
static already_AddRefed<nsApplicationAccessibleWrap> GetApplicationAccessible();
// Static methods for handling per-document cache
static void PutCacheEntry(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode>& aCache,
static void PutCacheEntry(nsAccessNodeHashtable& aCache,
void* aUniqueID, nsIAccessNode *aAccessNode);
static void GetCacheEntry(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode>& aCache, void* aUniqueID,
nsIAccessNode **aAccessNode);
static void ClearCache(nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode>& aCache);
static void GetCacheEntry(nsAccessNodeHashtable& aCache,
void* aUniqueID, nsIAccessNode **aAccessNode);
static void ClearCache(nsAccessNodeHashtable& aCache);
static PLDHashOperator PR_CALLBACK ClearCacheEntry(const void* aKey, nsCOMPtr<nsIAccessNode>& aAccessNode, void* aUserArg);
@ -184,7 +162,7 @@ protected:
static PRBool gIsCacheDisabled;
static PRBool gIsFormFillEnabled;
static nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> gGlobalDocAccessibleCache;
static nsAccessNodeHashtable gGlobalDocAccessibleCache;
private:
static nsIAccessibilityService *sAccService;

Просмотреть файл

@ -135,7 +135,7 @@ class nsDocAccessible : public nsHyperTextAccessibleWrap,
*/
void ARIAAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute);
nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> mAccessNodeCache;
nsAccessNodeHashtable mAccessNodeCache;
void *mWnd;
nsCOMPtr<nsIDocument> mDocument;
nsCOMPtr<nsITimer> mScrollWatchTimer;

Просмотреть файл

@ -132,7 +132,7 @@ mAccessNodeCache(nsnull)
if (mTree)
mTree->GetView(getter_AddRefs(mTreeView));
NS_ASSERTION(mTree && mTreeView, "Can't get mTree or mTreeView!\n");
mAccessNodeCache = new nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode>;
mAccessNodeCache = new nsAccessNodeHashtable;
mAccessNodeCache->Init(kDefaultTreeCacheSize);
}

Просмотреть файл

@ -84,7 +84,7 @@ public:
protected:
nsCOMPtr<nsITreeBoxObject> mTree;
nsCOMPtr<nsITreeView> mTreeView;
nsInterfaceHashtable<nsVoidHashKey, nsIAccessNode> *mAccessNodeCache;
nsAccessNodeHashtable *mAccessNodeCache;
NS_IMETHOD ChangeSelection(PRInt32 aIndex, PRUint8 aMethod, PRBool *aSelState);
};