void increment() override { assert (sle1_ || sle0_); if (sle1_ && !sle0_) { inc1(); return; } if (sle0_ && !sle1_) { inc0(); return; } if (sle1_->key () == sle0_->key()) { inc1(); inc0(); } else if (sle1_->key () < sle0_->key()) { inc1(); } else { inc0(); } skip(); }
void skip() { while (iter1_ != end1_ && iter1_->second.first == Action::erase && sle0_->key() == sle1_->key()) { inc1(); inc0(); if (! sle0_) return; } }
void *inc(void **p, int sz) { void *p0; p0 = *p; inc0(p, sz); return p0; }