HASHTABLE_ERR HashTable_Set(C_HASHTABLE *self, const char *pszKey, const void *pData, MEMSIZE Size); /**< データの設定 */
const void *HashTable_Get(C_HASHTABLE *self, const char *pszKey); /**< データの参照 */
HASHTABLE_ERR HashTable_Remove(C_HASHTABLE *self, const char *pszKey); /**< データの削除 */
+void HashTable_RemoveAll(C_HASHTABLE *self); /**< データの全削除 */
/* イテレータ */
T_HASHTABLE_ITERATOR *HashTable_FindOpen(C_HASHTABLE *self); /**< イテレータの生成 */
pIterator->pNext->pPrev = pIterator;
pIterator->pPrev->pNext = pIterator;
}
-
+
/* データ取り出し */
pszKey = (const char *)pNode + sizeof(T_HASHTABLE_NODE);
pData = (const void *)(pszKey + MemHeap_AlignSize(self->pMemHeap, strlen(pszKey)));
-
+
/* データ部を返す */
*ppszKey = pszKey;
return pData;
--- /dev/null
+/**
+ * Hyper Operating System Application Framework
+ *
+ * @file hashtable_get.c
+ * @brief %jp{ハッシュテーブルクラス}%en{hash table class}
+ *
+ * Copyright (C) 2006-2009 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+#include "hashtable_local.h"
+
+
+
+/** データの削除 */
+void HashTable_RemoveAll(C_HASHTABLE *self)
+{
+ T_HASHTABLE_NODE *pNode;
+ T_HASHTABLE_NODE *pNodeNext;
+ T_HASHTABLE_ITERATOR *pIterator;
+ int iIndex;
+
+ for ( iIndex = 0; iIndex < self->iTableSize; iIndex++ )
+ {
+ if ( (pNode = self->ppTable[iIndex]) != NULL )
+ {
+ do
+ {
+ /* 指しているイテレータがあれば外す */
+ if ( (pIterator = pNode->pIterator) != NULL )
+ {
+ do
+ {
+ pIterator->iIndex = self->iTableSize;
+ pIterator->pNode = NULL;
+ pIterator = pIterator->pNext;
+ } while ( pIterator != pNode->pIterator );
+ }
+
+ /* ノード削除 */
+ pNodeNext = pNode->pNext;
+ HashTable_DeleteNode(self, pNode);
+ self->iDataNum--;
+
+ pNode = pNodeNext;
+ } while ( pNode != NULL );
+
+ self->ppTable[iIndex] = NULL;
+ }
+ }
+}
+
+
+
+/* end of file */