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.
|
| SectionWriter (std::ostream &os) |
| Constructor.
|
|
| SectionWriter (const std::string &fn) |
| Constructor.
|
|
| SectionWriter (const char *fn) |
| Constructor.
|
|
| ~SectionWriter () |
| Destructor.
|
|
|
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.
|
|
|
void | run () |
| Start the batch processing.
|
|
std::ostream & | ostream () |
| Give back the stream of the writer.
|
|
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));