After the processing described in the previous section, we've now got
full details of what we need to output stored in the
profile_container
on a symbol-by-symbol basis. To
produce output, we need to replay that data and format it suitably.
opreport first asks the
profile_container
for a
symbol_collection
(this is also where thresholding
happens).
This is sorted, then a
opreport_formatter
is initialised.
This object initialises a set of field formatters as requested. Then
opreport_formatter::output()
is called. This
iterates through the (sorted) symbol_collection
;
for each entry, the selected fields (as set by the
format_flags
options) are output by calling the
field formatters, with the symbol_entry
passed in.