# This file is part of NIT ( http://www.nitlanguage.org ).
#
# Copyright 2006 Floréal Morandat <morandat@lirmm.fr>
+# Copyright 2009 Jean-Sebastien Gelinas <calestar@gmail.com>
#
# This file is free software, which comes along with NIT. This software is
# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# another product.
class FilterIStream
-special IStream
+ super IStream
# Filter readed elements
- readable attr _stream: IStream
+ var stream: nullable IStream = null
- redef meth eof: Bool
+ redef fun eof: Bool
do
assert stream != null
return stream.eof
end
-
- private meth stream=(i: IStream)
- do
- _stream = i
- end
end
class FilterOStream
-special OStream
+ super OStream
# Filter outputed elements
- readable attr _stream: OStream
+ var stream: nullable OStream = null
# Can the stream be used to write
- redef meth is_writable: Bool
+ redef fun is_writable: Bool
do
assert stream != null
return stream.is_writable
end
-
- private meth stream=(i: OStream)
- do
- _stream = i
- end
end
class StreamCat
-special FilterIStream
- attr _streams: Iterator[IStream]
+ super FilterIStream
+ var _streams: Iterator[IStream]
- redef meth eof: Bool
+ redef fun eof: Bool
do
if stream == null then
return true
end
end
- redef meth stream: IStream
+ 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 meth read_char: Int
+ redef fun read_char: Int
do
assert not eof
return stream.read_char
end
- redef meth close
+ redef fun close
do
while stream != null do
stream.close
end
class StreamDemux
-special FilterOStream
- attr _streams: Array[OStream]
+ super FilterOStream
+ var _streams: Array[OStream]
- redef meth is_writable: Bool
+ redef fun is_writable: Bool
do
if stream.is_writable then
return true
end
end
- redef meth 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