struct db open_db(const char *dir) { struct db db; db.w = open_logger(path(dir, "log")); db.r = open_reader(path(dir, "log")); db.mt = open_mtree(path(dir, "mtree")); db.bag = new_bag(BAG_SIZE); return db; }
void PushVector(const std::vector<T*> array) { totle_weight_ = 0.0; ptr_array_.clear(); bool is_not_overflow = true; int length = array.size(); int* elements = new int[length]; std::vector< xxcig::shared_ptr<SmartBag> > bag_array; for (int i = 0; i < length; ++i) { elements[i] = 1; std::vector<int> selectors(elements, elements + length); do { xxcig::shared_ptr<SmartBag> new_bag(new SmartBag(capacity_, param_function_)); for (size_t j = 0; j < selectors.size(); ++j) { if (1 == selectors[j]) { is_not_overflow = new_bag->PushMaterial(array[j]); } } if (new_bag->Size() > 0) { bag_array.push_back(new_bag); } } while (prev_permutation(selectors.begin(), selectors.end())); sort(bag_array.begin(), bag_array.end(), SmartBag::CompareBag); while (bag_array.size() > 1) { bag_array.pop_back(); // only leave the largest one } if (!is_not_overflow) { break; } } delete[] elements; if (bag_array.size() > 0) { for (int k = 0; k < bag_array.front()->Size(); ++k) { PushMaterial(bag_array.front()->GetMaterial(k)); } } }
void test_bag(int num_recs) { u64 key; struct lump val; struct bag *bag; u64 i; bag = new_bag(10); for (i = 0; i < num_recs; i++) { key = randkey(); if (0) val = randlump(); if (1) val = key2lump(key); //printf("%lld %*s\n", key, val.size, (char *)val.d); stuff_bag(bag, key, val); } sort_bag(bag); pr_bag(bag); free_bag(bag); }