You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bugs@apr.apache.org by bu...@apache.org on 2013/02/11 23:25:01 UTC
[Bug 54550] New: Feature request: insert an entry into hash-table,
if key is not already present
https://issues.apache.org/bugzilla/show_bug.cgi?id=54550
Bug ID: 54550
Summary: Feature request: insert an entry into hash-table, if
key is not already present
Product: APR
Version: 1.4.6
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: enhancement
Priority: P2
Component: APR
Assignee: bugs@apr.apache.org
Reporter: mi+apache@aldan.algebra.com
Classification: Unclassified
A fairly common use-case involves checking, if a particular key is already
present in a hash-table and inserting it, if not:
struct mystruct *value = apr_hash_get(table, key, klen);
if (value == NULL) {
value = create_new_value();
apr_hash_table_set(table, key, klen, value);
} else {
verify_value(value);
...
}
This means, the hash-table search is performed twice -- first by the
apr_hash_get, and then -- for the same key -- by the apr_hash_set. This is
suboptimal... There should be a function, that would insert a new entry (with
the value being NULL) under the specified key -- and allow the caller to set
the value. For example something like this:
struct myststruct **pvalue;
if (apr_hash_insert(table, key, klen, &pvalue)) {
*pvalue = create_new_value();
} else {
verify_value(*pvalue);
...
}
in the above apr_hash_insert the last argument will be filled with the address
of the value-pointer, that was either newly-inserted by the call (if the key
was a new one), or existed already (if the key was known). This would be
achieved with only a single hash-table search -- something find_entry() (the
static function behind both apr_hash_set and apr_hash_get) can already do.
The actual coding of this feature is not difficult. If there are no objections
in principle, I could come up with a patch. Please, advise. Thanks!
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: bugs-unsubscribe@apr.apache.org
For additional commands, e-mail: bugs-help@apr.apache.org