added qse_htl_yanknode(), qse_htl_upyank().

added qse_raddic_deletevendorbyname(), qse_raddic_deletevendorbyid()
This commit is contained in:
2017-12-11 08:48:06 +00:00
parent 4266d8026c
commit c9bbd3c993
5 changed files with 267 additions and 45 deletions

View File

@ -578,9 +578,30 @@ qse_htl_node_t* qse_htl_update (qse_htl_t* ht, void* data)
return node;
}
qse_htl_node_t* qse_htl_upyank (qse_htl_t* ht, void* data, void** olddata)
{
qse_htl_node_t* node;
void* datap, * olddatap;
node = qse_htl_search(ht, data);
if (!node) return QSE_NULL;
if (ht->copier)
{
datap = ht->copier (ht, data);
if (!datap) return QSE_NULL;
}
else datap = data;
*olddata = node->data;
node->data = datap;
return node;
}
qse_htl_node_t* qse_htl_ensert (qse_htl_t* ht, void* data)
{
qse_htl_node_t *node;
qse_htl_node_t* node;
node = qse_htl_search(ht, data);
if (!node) node = qse_htl_insert(ht, data);
@ -588,19 +609,14 @@ qse_htl_node_t* qse_htl_ensert (qse_htl_t* ht, void* data)
return node;
}
/*
* Yank an entry from the hash table, without freeing the data.
*/
void* qse_htl_yank (qse_htl_t* ht, void* data)
qse_htl_node_t* qse_htl_yanknode (qse_htl_t* ht, void* data)
{
qse_uint32_t key;
qse_uint32_t entry;
qse_uint32_t reversed;
void *old;
qse_htl_node_t* node;
if (!ht) return QSE_NULL;
key = ht->hasher(ht, data);
entry = key & ht->mask;
reversed = reverse(key);
@ -613,9 +629,23 @@ void* qse_htl_yank (qse_htl_t* ht, void* data)
list_delete(ht, &ht->buckets[entry], node);
ht->num_elements--;
return node;
}
/*
* Yank an entry from the hash table, without freeing the data.
*/
void* qse_htl_yank (qse_htl_t* ht, void* data)
{
qse_htl_node_t* node;
void* old;
node = qse_htl_yanknode (ht, data);
if (!node) return QSE_NULL;
old = node->data;
QSE_MMGR_FREE (ht->mmgr, node);
return old;
}