# another product.
class FilterIStream
-special IStream
+ super IStream
# Filter readed elements
- readable var _stream: nullable IStream
+ var stream: nullable IStream = null
redef fun eof: Bool
do
assert stream != null
return stream.eof
end
-
- private fun stream=(i: nullable IStream)
- do
- _stream = i
- end
end
class FilterOStream
-special OStream
+ super OStream
# Filter outputed elements
- readable var _stream: nullable OStream
+ var stream: nullable OStream = null
# Can the stream be used to write
redef fun is_writable: Bool
assert stream != null
return stream.is_writable
end
-
- private fun stream=(i: OStream)
- do
- _stream = i
- end
end
class StreamCat
-special FilterIStream
+ super FilterIStream
var _streams: Iterator[IStream]
redef fun eof: Bool
redef fun stream: nullable IStream
do
- if _stream == null and _streams.is_ok then
- stream = _streams.item
- assert _stream != null
+ var res = super
+ if res == null and _streams.is_ok then
+ res = _streams.item
+ stream = res
+ assert stream != null
_streams.next
end
- return _stream
+ return res
end
redef fun read_char: Int
end
class StreamDemux
-special FilterOStream
+ super FilterOStream
var _streams: Array[OStream]
redef fun is_writable: Bool
end
end
- redef fun write(s: String)
+ redef fun write(s: Text)
do
for i in _streams
do
end
end
+ redef fun close
+ do
+ for i in _streams
+ do
+ stream = i
+ stream.close
+ end
+ end
+
init with_streams(streams: Array[OStream])
do
_streams = streams