Esempio n. 1
0
llong MockReadonlyIndex::searchExact(fstring key, DbContext*) const {
	size_t lower;
	if (forwardLowerBound(key, &lower) >= 0) {
		return m_ids[lower];
	}
	return -1; // not found
}
Esempio n. 2
0
	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;
	}
Esempio n. 3
0
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]);
		}
	}
}