2196 {
2197 size_t hash = Spec::hash(key.
as_ptr());
2201 VRef<Node>
last = vnull<Node>();
2202 while (!node.is_null()) {
2203 Node *node_ptr = node.as_ptr();
2204 if (hash == node_ptr->hash
2205 && Spec::equal(key.
as_ptr(), node_ptr->key.as_ptr())) {
2206 value = node_ptr->value;
2207 if (!
last.is_null()) {
2208
2209 last->next = node_ptr->next;
2212 }
2213 oldkey = node_ptr->key;
2214 oldvalue = node_ptr->value;
2215 if (replace) {
2216 node_ptr->key = key;
2217 node_ptr->value = value;
2218 }
2220 return false;
2221 }
2223 node = node->next;
2224 }
2225 node = vnew<Node>();
2226 Node *node_ptr = node.as_ptr();
2227 node_ptr->hash = hash;
2228 node_ptr->key = key;
2229 node_ptr->value = value;
2232 oldkey = key;
2233 oldvalue = value;
2235 return true;
2236}