678 unmodified lines
Expand all
if (it->base_cells > 0) {
bool parent_ok = false;
for (const auto& p : entries) {
if (p.path == it->parent_path && p.base_cells == 0 &&
(int64_t) p.ids.size() >= it->base_cells && is_prefix(p.ids, it->ids)) {
(int64_t) common_prefix(p.ids, it->ids, p.ids.size()) >= it->base_cells) {
parent_ok = true;
break;
}
}
113 unmodified lines
Expand all
int64_t base_cells = 0;
if (!pinned) {
size_t best_len = 0;
for (const auto& e : entries) {
if (e.pinned && e.base_cells == 0 && e.pads == pads &&
e.ids.size() >= kLearnMinTokens && e.ids.size() + 4 <= ids.size() &&
e.ids.size() > best_len && is_prefix(e.ids, ids)) {
const int64_t c0 = ((int64_t) e.ids.size() / 4) * 4;
if (c0 >= (int64_t) kLearnMinTokens) {
best_len = e.ids.size();
if (e.pinned && e.base_cells == 0 && e.pads.empty() &&
e.ids.size() >= kLearnMinTokens && ids.size() >= kLearnMinTokens + 4) {
const size_t lcp = common_prefix(e.ids, ids, std::min(e.ids.size(), ids.size() - 4));
const int64_t c0 = ((int64_t) lcp / 4) * 4;
if (c0 >= (int64_t) kLearnMinTokens && (size_t) c0 > best_len &&
(pads.empty() || pads.front() >= c0)) {
best_len = (size_t) c0;
base_cells = c0;
parent_path = e.path;
}
}
348 unmodified lines
Expand all
const auto new_pads = strata::core::scr_pad_positions(plan);
cached_pads.insert(cached_pads.end(), new_pads.begin(), new_pads.end());
std::sort(cached_pads.begin(), cached_pads.end());
cached_pads.erase(std::unique(cached_pads.begin(), cached_pads.end()), cached_pads.end());
save_ck_at(cached_ids);
bool scr_ok = true;
int64_t cur_p = plan.restore > 0 ? plan.restore : (int64_t) lcp;
if (plan.restore > 0) {
for (const auto& s : ck_ring) {
if ((int64_t) s.ids.size() == plan.restore) {
me::window_checkpoint_restore(s.ck, err);
ss.ple_prev[0] = s.prev0;
ss.ple_prev[1] = s.prev1;
break;
}
}
}
for (const auto& r : plan.runs) {
if (r.at > cur_p) {
if (!me::prompt_run_rows(ids.data() + cur_p, r.at - cur_p, cur_p, on_chunk, err)) {
scr_ok = false;
break;
}
cur_p = r.at + r.n;
}
if (scr_ok && plan.adopt != (int64_t) cached_ids.size()) {
if (scr_ok && plan.adopt > 0) {
for (const auto& s : ck_ring) {
if ((int64_t) s.ids.size() == plan.adopt) {
me::window_checkpoint_restore(s.ck, err);
ss.ple_prev[0] = s.prev0;
597 unmodified lines
Expand all