use crate::PrimitiveBlock;
use crate::Element;
use super::diff_ranges::DiffRanges;
pub(super) fn block_overlaps_diff(block: &PrimitiveBlock, ranges: &DiffRanges) -> bool {
use std::cmp::Ordering;
let mut node_cursor: usize = 0;
let mut way_cursor: usize = 0;
let mut rel_cursor: usize = 0;
for element in block.elements_skip_metadata() {
let (cursor, sorted, id) = match &element {
Element::DenseNode(dn) => (&mut node_cursor, &ranges.node_ids[..], dn.id()),
Element::Node(n) => (&mut node_cursor, &ranges.node_ids[..], n.id()),
Element::Way(w) => (&mut way_cursor, &ranges.way_ids[..], w.id()),
Element::Relation(r) => (&mut rel_cursor, &ranges.rel_ids[..], r.id()),
};
while *cursor < sorted.len()
&& crate::osm_id::osm_id_cmp(sorted[*cursor], id) == Ordering::Less
{
*cursor += 1;
}
if *cursor < sorted.len() && sorted[*cursor] == id {
return true;
}
}
false
}