llong MockReadonlyIndex::searchExact(fstring key, DbContext*) const { size_t lower; if (forwardLowerBound(key, &lower) >= 0) { return m_ids[lower]; } return -1; // not found }
int seekLowerBound(fstring key, llong* id, valvec<byte>* retKey) override { auto owner = static_cast<const MockReadonlyIndex*>(m_index.get()); int ret = owner->forwardLowerBound(key, &m_pos); if (ret >= 0) { assert(m_pos < owner->m_ids.size()); owner->getIndexKey(id, retKey, m_pos); m_pos++; } return ret; }
void MockReadonlyIndex::searchExactAppend(fstring key, valvec<llong>* recIdvec, DbContext*) const { size_t lower; if (forwardLowerBound(key, &lower) != 0) { return; } size_t f = m_fixedLen; if (f) { auto sp = m_keys.strpool.data(); size_t i = lower; while (i < m_ids.size() && memcmp(key.p, sp + f*m_ids[i], f) == 0) { recIdvec->push_back(m_ids[i]); i++; } } else { for (size_t i = lower; i < m_ids.size() && m_keys[m_ids[i]] == key; ++i) { recIdvec->push_back(m_ids[i]); } } }