view::const_iterator& view::const_iterator::operator++() { if (!_element) { return *this; } bson_iter_t i = to_bson_iter_t(_element); bson_iter_next(&i); if (!bson_iter_next(&i)) { _element = element{nullptr, 0, 0}; } else { _element = element{i.raw, i.len, i.off}; } return *this; }
view::const_iterator& view::const_iterator::operator++() { if (!_element) { return *this; } // the bson_t pointer and length remain unchanged while iterating. auto raw = _element.raw(); auto len = _element.length(); bson_iter_t iter = to_bson_iter_t(_element); if (!bson_iter_next(&iter)) { _element = element{}; } else { _element = element{raw, len, bson_iter_offset(&iter), bson_iter_key_len(&iter)}; } return *this; }