pn_sequence_t pni_entry_track(pni_entry_t *entry) { assert(entry); pni_store_t *store = entry->stream->store; entry->id = store->hwm++; pn_hash_put(store->tracked, entry->id, entry); if (store->window >= 0) { while (store->hwm - store->lwm > store->window) { pni_entry_t *e = pni_store_entry(store, store->lwm); if (e) { pn_hash_del(store->tracked, store->lwm); } store->lwm++; } } return entry->id; }
void pni_iocpdesc_map_push(iocpdesc_t *iocpd) { pn_hash_put(iocpd->iocp->iocpdesc_map, iocpd->socket, iocpd); pn_decref(iocpd); assert(pn_refcount(iocpd) == 1); }
static void test_hash(void) { void *one = pn_class_new(PN_OBJECT, 0); void *two = pn_class_new(PN_OBJECT, 0); void *three = pn_class_new(PN_OBJECT, 0); pn_hash_t *hash = pn_hash(PN_OBJECT, 4, 0.75); pn_hash_put(hash, 0, NULL); pn_hash_put(hash, 1, one); pn_hash_put(hash, 2, two); pn_hash_put(hash, 3, three); pn_hash_put(hash, 4, one); pn_hash_put(hash, 5, two); pn_hash_put(hash, 6, three); pn_hash_put(hash, 7, one); pn_hash_put(hash, 8, two); pn_hash_put(hash, 9, three); pn_hash_put(hash, 10, one); pn_hash_put(hash, 11, two); pn_hash_put(hash, 12, three); pn_hash_put(hash, 18, one); assert(pn_hash_get(hash, 2) == two); assert(pn_hash_get(hash, 5) == two); assert(pn_hash_get(hash, 18) == one); assert(pn_hash_get(hash, 0) == NULL); assert(pn_hash_size(hash) == 14); pn_hash_del(hash, 5); assert(pn_hash_get(hash, 5) == NULL); assert(pn_hash_size(hash) == 13); pn_hash_del(hash, 18); assert(pn_hash_get(hash, 18) == NULL); assert(pn_hash_size(hash) == 12); pn_decref(hash); pn_decref(one); pn_decref(two); pn_decref(three); }