static void test_ctree_find() { struct ctree *t = ctree_new(); UT_ASSERT(t != NULL); /* search empty tree */ uint64_t k = TEST_VAL_A; UT_ASSERT(ctree_find_le(t, &k) == 0); /* insert 2 valid elements */ UT_ASSERT(ctree_insert(t, TEST_VAL_A, TEST_VAL_A) == 0); UT_ASSERT(ctree_insert(t, TEST_VAL_B, TEST_VAL_B) == 0); /* search for values */ k = 0; UT_ASSERT(ctree_find_le(t, &k) == 0); k = TEST_VAL_A; UT_ASSERT(ctree_find_le(t, &k) == TEST_VAL_A); k = TEST_VAL_B; UT_ASSERT(ctree_find_le(t, &k) == TEST_VAL_B); ctree_delete(t); }
/* * pmemobj_pool_by_ptr -- returns the pool handle associated with the address */ PMEMobjpool * pmemobj_pool_by_ptr(const void *addr) { LOG(3, "addr %p", addr); uint64_t key = (uint64_t)addr; size_t pool_size = ctree_find_le(pools_tree, &key); if (pool_size == 0) return NULL; ASSERT((uint64_t)addr >= key); uint64_t addr_off = (uint64_t)addr - key; if (pool_size <= addr_off) return NULL; return (PMEMobjpool *)key; }