bool EvictionIterator::next(TableTuple &tuple) { PersistentTable* ptable = static_cast<PersistentTable*>(table); if(current_tuple_id == ptable->getNewestTupleID()) // we've already returned the last tuple in the chain { VOLT_DEBUG("No more tuples in the chain."); return false; } if(current_tuple_id == -1) // this is the first call to next { VOLT_DEBUG("This is the first tuple in the chain."); if(ptable->getNumTuplesInEvictionChain() == 0) // there are no tuples in the chain { VOLT_DEBUG("There are no tuples in the eviction chain."); return false; } current_tuple_id = ptable->getOldestTupleID(); } else // advance the iterator to the next tuple in the chain { current_tuple_id = current_tuple->getTupleID(); } current_tuple->move(ptable->dataPtrForTuple(current_tuple_id)); tuple.move(current_tuple->address()); VOLT_DEBUG("current_tuple_id = %d", current_tuple_id); return true; }
bool EvictionIterator::next(TableTuple &tuple) { #ifndef ANTICACHE_TIMESTAMPS PersistentTable* ptable = static_cast<PersistentTable*>(table); if(current_tuple_id == ptable->getNewestTupleID()) // we've already returned the last tuple in the chain { VOLT_DEBUG("No more tuples in the chain."); return false; } if(is_first) // this is the first call to next { is_first = false; VOLT_DEBUG("This is the first tuple in the chain."); if(ptable->getNumTuplesInEvictionChain() == 0) // there are no tuples in the chain { VOLT_DEBUG("There are no tuples in the eviction chain."); return false; } current_tuple_id = ptable->getOldestTupleID(); } else // advance the iterator to the next tuple in the chain { current_tuple_id = current_tuple->getNextTupleInChain(); } current_tuple->move(ptable->dataPtrForTuple(current_tuple_id)); tuple.move(current_tuple->address()); VOLT_DEBUG("current_tuple_id = %d", current_tuple_id); #else tuple.move(candidates[current_tuple_id].m_addr); current_tuple_id++; while (candidates[current_tuple_id].m_addr == candidates[current_tuple_id - 1].m_addr) { current_tuple_id++; if (current_tuple_id == m_size) break; } #endif return true; }