(root)/
Python-3.12.0/
Tools/
c-analyzer/
c_common/
iterutil.py
       1  def peek_and_iter(items):
       2      if not items:
       3          return None, None
       4      items = iter(items)
       5      try:
       6          peeked = next(items)
       7      except StopIteration:
       8          return None, None
       9      def chain():
      10          yield peeked
      11          yield from items
      12      return chain(), peeked
      13  
      14  
      15  def iter_many(items, onempty=None):
      16      if not items:
      17          if onempty is None:
      18              return
      19          if not callable(onempty):
      20              raise onEmpty
      21          items = onempty(items)
      22          yield from iter_many(items, onempty=None)
      23          return
      24      items = iter(items)
      25      try:
      26          first = next(items)
      27      except StopIteration:
      28          if onempty is None:
      29              return
      30          if not callable(onempty):
      31              raise onEmpty
      32          items = onempty(items)
      33          yield from iter_many(items, onempty=None)
      34      else:
      35          try:
      36              second = next(items)
      37          except StopIteration:
      38              yield first, False
      39              return
      40          else:
      41              yield first, True
      42              yield second, True
      43          for item in items:
      44              yield item, True