'Yields responses of a given type only.
_GenerateSingleTypeIteration iterates through converted_responses and
only yields responses of the same type. The type is either popped from
next_types or inferred from the first item of converted_responses.
The type is added to a set of processed_types.
Along the way _GenerateSingleTypeIteration updates next_types set.
All newly encountered and not previously processed types are added to
next_types set.
Calling _GenerateSingleTypeIteration multiple times allows doing
multiple passes on converted responses and emitting converted responses
of the same type continuously (so that they can be written into
the same file by the plugin).
Args:
next_types: List of value type classes that will be used in further
iterations.
processed_types: List of value type classes that have been used
already.
converted_responses: Iterable with values to iterate over.
Yields:
Values from converted_response with the same type. Type is either
popped from the next_types set or inferred from the first
converted_responses value.'

def _GenerateSingleTypeIteration(self, next_types, processed_types, converted_responses):

    if (not next_types):
        current_type = None
    else:
        current_type = next_types.pop()
        processed_types.add(current_type)
    for converted_response in converted_responses:
        if (not current_type):
            current_type = converted_response.__class__
            processed_types.add(current_type)
        if (converted_response.__class__ != current_type):
            if (converted_response.__class__ not in processed_types):
                next_types.add(converted_response.__class__)
            continue
        (yield converted_response)
