# CSV output facilities
module csv
-# A CSV document representation
-class CSVDocument
+# A CSV document representation.
+class CsvDocument
super Streamable
var header: Array[String] = new Array[String] is writable
- var lines: Array[Array[String]] = new Array[Array[String]]
+ var records: Array[Array[String]] = new Array[Array[String]]
fun set_header(values: Object...) do
header.clear
- for value in values do
- header.add(value.to_s)
- end
+ for value in values do header.add(value.to_s)
end
- fun add_line(values: Object...) do
- if values.length != header.length then
- print "CSV error: header declares {header.length} columns, line contains {values.length} values"
- abort
- end
- var line = new Array[String]
- for value in values do
- line.add(value.to_s)
+ fun add_record(values: Object...) do
+ assert values.length == header.length else
+ sys.stderr.write "CSV error: Header declares {header.length} columns, record contains {values.length} values.\n"
end
- lines.add(line)
+ var record = new Array[String]
+ for value in values do record.add(value.to_s)
+ records.add(record)
end
private fun write_line_to(line: Collection[String], stream: OStream)
stream.write("\n")
end
- redef fun write_to(stream)
- do
+ redef fun write_to(stream) do
write_line_to(header, stream)
- for line in lines do write_line_to(line, stream)
+ for record in records do write_line_to(record, stream)
end
- # deprecated alias for `write_to_file`
+ # Deprecated alias for `write_to_file`.
fun save(file: String) do write_to_file(file)
end
end
if csv then
- var csvh = new CSVDocument
+ var csvh = new CsvDocument
csvh.header = ["povr", "ovr", "pext", "ext", "pspe", "spe", "prep", "rep", "eq"]
for mclass in mclasses do
var povr = mclass.is_pure_overrider(vis).object_id
var prep = mclass.is_pure_replacer(vis).object_id
var rep = mclass.is_replacer(vis).object_id
var eq = mclass.is_equal(vis).object_id
- csvh.add_line(povr, ovr, pext, ext, pspe, spe, prep, rep, eq)
+ csvh.add_record(povr, ovr, pext, ext, pspe, spe, prep, rep, eq)
end
csvh.save("{out}/inheritance_behaviour.csv")
end
end
# Export the metric set in CSV format
- fun to_csv: CSVDocument do
- var csv = new CSVDocument
+ fun to_csv: CsvDocument do
+ var csv = new CsvDocument
# set csv headers
csv.header.add("entry")
line.add("n/a")
end
end
- csv.lines.add(line)
+ csv.records.add(line)
end
return csv
end
# Return a ready-to-save CSV document objet that agregates informations about live types.
# Each discovered type is listed in a line, with its status: resolution, liveness, cast-liveness.
# Note: types are listed in an alphanumeric order to improve human reading.
- fun live_types_to_csv: CSVDocument
+ fun live_types_to_csv: CsvDocument
do
# Gather all kind of type
var typeset = new HashSet[MType]
typeset.add_all(live_open_cast_types)
var types = typeset.to_a
(new CachedAlphaComparator).sort(types)
- var res = new CSVDocument
+ var res = new CsvDocument
res.header = ["Type", "Resolution", "Liveness", "Cast-liveness"]
for t in types do
var reso
if t isa MClassType and (live_types.has(t) or live_open_types.has(t)) then live = "LIVE" else live = "DEAD"
var cast
if live_cast_types.has(t) or live_open_cast_types.has(t) then cast = "CAST LIVE" else cast = "CAST DEAD"
- res.add_line(t, reso, live, cast)
+ res.add_record(t, reso, live, cast)
end
return res
end