You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Enumerator<T> concept currently prescribes the following usage pattern:
zero or one move_first
if zero move_first, done
else if one move_first and false, done
else one move_first and true, proceed to (2)
zero or more current
zero or one move_next
if zero move_next, done
if one move_next and false, done
else one move_next and true, proceed to (2)
The Enumerator<T> concept should prescribe the following usage pattern:
zero or one move_first
if zero move_first, done
else if one move_first and false, zero or more move_next (all returning false) then done
else one move_first and true, proceed to (2)
zero or more current
zero or one move_next
if zero move_next, done
if one move_next and false, zero or more move_next (all returning false) then done
else one move_next and true, proceed to (2)
This differs from the previous semantics, which forbid calling move_next any more after having gotten a false return from move_first or move_next. That previous restriction imposed by the semantics was both unnecessary and (it turns out) inconvenient. Operations like merge, union, intersect, except, etc. can be implemented with less state if this restriction is relaxed.
The text was updated successfully, but these errors were encountered:
The
Enumerator<T>
concept currently prescribes the following usage pattern:move_first
move_first
, donemove_first
andfalse
, donemove_first
andtrue
, proceed to (2)current
move_next
move_next
, donemove_next
andfalse
, donemove_next
andtrue
, proceed to (2)The
Enumerator<T>
concept should prescribe the following usage pattern:move_first
move_first
, donemove_first
andfalse
, zero or moremove_next
(all returningfalse
) then donemove_first
andtrue
, proceed to (2)current
move_next
move_next
, donemove_next
andfalse
, zero or moremove_next
(all returningfalse
) then donemove_next
andtrue
, proceed to (2)This differs from the previous semantics, which forbid calling move_next any more after having gotten a
false
return frommove_first
ormove_next
. That previous restriction imposed by the semantics was both unnecessary and (it turns out) inconvenient. Operations likemerge
,union
,intersect
,except
, etc. can be implemented with less state if this restriction is relaxed.The text was updated successfully, but these errors were encountered: