module metrics_base
import modelbuilder
+import csv
redef class ToolContext
redef fun compare(a,b) do return self.counter.map[a] <=> self.counter.map[b]
end
-# Helper class to output metrics as CVS formatted files
-class CSVDocument
- private var file: String
- private var header: Array[String] = new Array[String]
- private var lines: Array[Array[String]] = new Array[Array[String]]
-
- init(file: String) do self.file = file
-
- fun set_header(values: Object...) do
- header.clear
- 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)
- lines.add(line)
- end
-
- redef fun to_s do
- var str = header.join(";") + "\n"
- for line in lines do str += line.join(";") + "\n"
- return str
- end
-
- fun save do
- var out = new OFStream.open(self.file)
- out.write(self.to_s)
- out.close
- end
-end
-
# Helper function to display n/d and handle division by 0
fun div(n: Int, d: Int): String
do