File Writer
The FileWriter contains objects to help streamline output to files. The to-be-outputted data
are stored in LineFormatter objects, which are essentially ostream objects. They automatically
end the line whenever they are destructed; for example they will end lines automatically
inside a loop. At the end of each line there is appended a tag, which is a # followed by a
string. The tag allows the user to append a label to a line to make for easy searching later
with grep or shell scripts.
The other object is the FileWriter object, which opens the output file stream, and closes
it automatically when it is destroyed. The FileWriter is the object that gives the ostream;
this ostream can be passed to the LineFormatter for data output using, for example,
the FileWriter header() method.
The FileWriter is used extensively in the gradientFlow application. Very generally, the
FileWriter can be used following an example like this one:
FileWriter filePolyCorrSinglet(commBase, latticeParameters);
filePolyCorrSinglet.createFile("PolyCorrFileName");
LineFormatter newLineplc1 = filePolyCorrSinglet.tag(""); /// Passes ostream to newLineplc1
newLineplc1 << flow_time;
/// Write std::vector vec_plc1 to output file
for (int dx=0 ; dx<distmax ; dx++) {
newLineplc1 << vec_plc1[dx];
}
Remember that when newLineplc1 leaves scope, it will end the line in the output file. By
default there will be some white space between output from the LineFormatter. This can be
seen from the fieldwidth argument in its constructor
LineFormatter(std::ostream &ostr, std::string tag, int prec = 7, bool space = true) :
_tag(tag), _ostr(ostr), fieldwidth(prec + 8), endl(false)
which is then used in the << stream operator
template<typename T>
LineFormatter & operator<<(const T &obj) {
_ostr << std::setw(fieldwidth) << obj;
return *this;
}