In the LGF file extra sections can be placed, which contain any data in arbitrary format. Such sections can be written with this class. A writing rule can be added to the class with two different functions. With the sectionLines()
function a generator can write the section line-by-line, while with the sectionStream()
member the section can be written to an output stream.
#include <lemon/lgf_writer.h>
Public Member Functions | |
SectionWriter (std::ostream &os) | |
Constructor. | |
SectionWriter (const std::string &fn) | |
Constructor. | |
SectionWriter (const char *fn) | |
Constructor. | |
~SectionWriter () | |
Destructor. | |
Section Writers | |
template<typename Functor > | |
SectionWriter & | sectionLines (const std::string &type, Functor functor) |
Add a section writer with line oriented writing. | |
template<typename Functor > | |
SectionWriter & | sectionStream (const std::string &type, Functor functor) |
Add a section writer with stream oriented writing. | |
Execution of the Writer | |
void | run () |
Start the batch processing. | |
std::ostream & | ostream () |
Give back the stream of the writer. | |
Friends | |
SectionWriter | sectionWriter (std::ostream &os) |
Return a SectionWriter class. | |
SectionWriter | sectionWriter (const std::string &fn) |
Return a SectionWriter class. | |
SectionWriter | sectionWriter (const char *fn) |
Return a SectionWriter class. |
SectionWriter | ( | std::ostream & | os | ) | [inline] |
Construct a section writer, which writes to the given output stream.
SectionWriter | ( | const std::string & | fn | ) | [inline] |
Construct a section writer, which writes into the given file.
SectionWriter | ( | const char * | fn | ) | [inline] |
Construct a section writer, which writes into the given file.
SectionWriter& sectionLines | ( | const std::string & | type, |
Functor | functor | ||
) | [inline] |
The first parameter is the type descriptor of the section, the second is a generator with std::string values. At the writing process, the returned std::string
will be written into the output file until it is an empty string.
For example, an integer vector is written into a section.
@numbers 12 45 23 78 4 28 38 28 23 6 16
The generator is implemented as a struct.
struct NumberSection { std::vector<int>::const_iterator _it, _end; NumberSection(const std::vector<int>& data) : _it(data.begin()), _end(data.end()) {} std::string operator()() { int rem_in_line = 4; std::ostringstream ls; while (rem_in_line > 0 && _it != _end) { ls << *(_it++) << ' '; --rem_in_line; } return ls.str(); } }; // ... writer.sectionLines("numbers", NumberSection(vec));
SectionWriter& sectionStream | ( | const std::string & | type, |
Functor | functor | ||
) | [inline] |
The first parameter is the type of the section, the second is a functor, which takes a std::ostream&
parameter. The functor writes the section to the output stream.
void run | ( | ) | [inline] |
This function starts the batch processing.
std::ostream& ostream | ( | ) | [inline] |
Returns the stream of the writer
SectionWriter sectionWriter | ( | const std::string & | fn | ) | [friend] |
This function just returns a SectionWriter class.
SectionWriter sectionWriter | ( | const char * | fn | ) | [friend] |
This function just returns a SectionWriter class.