Path: blob/main/Tools/c-analyzer/c_common/iterutil.py
12 views
def peek_and_iter(items):1if not items:2return None, None3items = iter(items)4try:5peeked = next(items)6except StopIteration:7return None, None8def chain():9yield peeked10yield from items11return chain(), peeked121314def iter_many(items, onempty=None):15if not items:16if onempty is None:17return18if not callable(onempty):19raise onEmpty20items = onempty(items)21yield from iter_many(items, onempty=None)22return23items = iter(items)24try:25first = next(items)26except StopIteration:27if onempty is None:28return29if not callable(onempty):30raise onEmpty31items = onempty(items)32yield from iter_many(items, onempty=None)33else:34try:35second = next(items)36except StopIteration:37yield first, False38return39else:40yield first, True41yield second, True42for item in items:43yield item, True444546