in mdb_shard/src/set_operations.rs [34:63]
fn get_next_actions(h1: Option<&MerkleHash>, h2: Option<&MerkleHash>, op: MDBSetOperation) -> Option<[NextAction; 2]> {
match (h1, h2) {
(None, None) => None,
(Some(_), None) => {
if op == MDBSetOperation::Union {
Some([NextAction::CopyToOut, NextAction::Nothing])
} else {
Some([NextAction::SkipOver, NextAction::Nothing])
}
},
(None, Some(_)) => Some([NextAction::Nothing, NextAction::CopyToOut]),
(Some(ft0), Some(ft1)) => match ft0.cmp(ft1) {
std::cmp::Ordering::Less => {
if op == MDBSetOperation::Union {
Some([NextAction::CopyToOut, NextAction::Nothing])
} else {
Some([NextAction::SkipOver, NextAction::Nothing])
}
},
std::cmp::Ordering::Equal => {
if op == MDBSetOperation::Union {
Some([NextAction::CopyToOut, NextAction::SkipOver])
} else {
Some([NextAction::SkipOver, NextAction::SkipOver])
}
},
std::cmp::Ordering::Greater => Some([NextAction::Nothing, NextAction::CopyToOut]),
},
}
}