factor some code-based stream types out into classes
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / FlattenedStream.pm
diff --git a/lib/HTML/Zoom/FlattenedStream.pm b/lib/HTML/Zoom/FlattenedStream.pm
new file mode 100644 (file)
index 0000000..28c44c2
--- /dev/null
@@ -0,0 +1,23 @@
+package HTML::Zoom::FlattenedStream;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(HTML::Zoom::StreamBase);
+
+sub new {
+  my ($class, $args) = @_;
+  bless({ _source => $args->{source}, _zconfig => $args->{zconfig} }, $class);
+}
+
+sub next {
+  return unless (my $self = shift)->{_source};
+  my ($next, $s);
+  until (($next) = ($s = $self->{_cur}) ? $s->next : ()) {
+    unless (($self->{_cur}) = $self->{_source}->next) {
+      delete $self->{_source}; return;
+    }
+  }
+  return $next;
+}
+
+1;