/usr/include/srchilite/bufferedoutput.h is in libsource-highlight-dev 3.1.6-2ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | //
// Author: Lorenzo Bettini <http://www.lorenzobettini.it>, (C) 2004-2008
//
// Copyright: See COPYING file that comes with this distribution
//
#ifndef BUFFEREDOUTPUT_H_
#define BUFFEREDOUTPUT_H_
#include <ostream>
#include <string>
#include <set>
namespace srchilite {
/// the contents to be put after a line or after the document
typedef std::set<std::string> PostContents;
/**
* The main class for writing into the output. It wraps an ostream object
* and can perform buffering. Moreover, it provides functionalities
* to write something after a line or after an entire document (these contents
* are buffered so that they can be inserted at any time, with
* postLineInsert and postDocInsert
* and will be actually inserted in the output
* with writePostLine and writePostDoc).
*/
class BufferedOutput {
/// the stream used to output strings
std::ostream &outputBuff;
/// whether to flush the output stream at each output operation
bool alwaysFlush;
/// the contents to be output after each line
PostContents postLineContents;
/// the contents to be output after the entire document
PostContents postDocContents;
/**
* Writes all the (buffered) elements (and clear the buffer)
* @param post the buffered elements
* @param prefix the string to prefix all the elements
*/
void writePostInfo(PostContents &post, const std::string &prefix = "");
public:
/**
* @param os the ostream where data will be written
*/
BufferedOutput(std::ostream &os);
~BufferedOutput();
/**
* Whether to flush the output stream at each output operation
* @param a
*/
void setAlwaysFlush(bool a = true) {
alwaysFlush = a;
}
/**
* Writes the passed string into the output
* @param s
*/
void output(const std::string &s);
/**
* Writes the passed string into the contents to be output after the current line
* @param s
*/
void postLineInsert(const std::string &s);
/**
* Writes the passed string into the contents to be output after the entire document
* @param s
*/
void postDocInsert(const std::string &s);
/**
* Writes the elements of the passed generic collection
* into the contents to be output after the current line
* @param s
*/
template<typename T> void postLineInsertFrom(const T &s) {
for (typename T::const_iterator it = s.begin(); it != s.end(); ++it)
postLineInsert(*it);
}
/**
* Writes the elements of the passed generic collection
* into the contents to be output after the entire document
* @param s
*/
template<typename T> void postDocInsertFrom(const T &s) {
for (typename T::const_iterator it = s.begin(); it != s.end(); ++it)
postDocInsert(*it);
}
/**
* Writes all the (buffered) elements after the current line (and clear the buffer)
* @param prefix the string to prefix all the elements
*/
void writePostLine(const std::string &prefix = "");
/**
* Writes all the (buffered) elements after the current document (and clear the buffer)
* @param prefix the string to prefix all the elements
*/
void writePostDoc(const std::string &prefix = "");
};
}
#endif /*BUFFEREDOUTPUT_H_*/
|