###############################################################################
+redef class Streamable
+ # Like `write_to` but take care of creating the file
+ fun write_to_file(filepath: String)
+ do
+ var stream = new OFStream.open(filepath)
+ write_to(stream)
+ stream.close
+ end
+end
+
redef class String
# return true if a file with this names exists
fun file_exists: Bool do return to_cstring.file_exists
#
# The point of this interface it to allow is instance to be efficenty
# writen into a OStream without having to allocate a big String object
+#
+# ready-to-save documents usually provide this interface.
interface Streamable
# Write itself to a `stream`
# The specific logic it let to the concrete subclasses
fun write_to(stream: OStream) is abstract
+
+ # Like `write_to` but return a new String (may be quite large)
+ #
+ # This funtionnality is anectodical, since the point
+ # of streamable object to to be efficienlty written to a
+ # stream without having to allocate and concatenate strings
+ fun write_to_string: String
+ do
+ var stream = new StringOStream
+ write_to(stream)
+ return stream.to_s
+ end
end
redef class String
# Flag to avoid infinite recursivity if a template contains itself
private var is_writing = false
-
- # Like `write_to` but return a new String (may be quite large)
- #
- # Examples in this documentation use `write_to_string` but mainly for simplicity.
- fun write_to_string: String
- do
- var stream = new StringOStream
- write_to(stream)
- return stream.to_s
- end
-
- # Like `write_to` but take care of creating the file
- fun write_to_file(filepath: String)
- do
- var stream = new OFStream.open(filepath)
- write_to(stream)
- stream.close
- end
end