io: add make_indented
This commit is contained in:
parent
aa52f440bc
commit
c76914b354
22
io.hpp
22
io.hpp
@ -59,6 +59,7 @@ namespace util {
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
class indenter : public std::streambuf {
|
||||
protected:
|
||||
std::streambuf* m_dest;
|
||||
@ -76,7 +77,19 @@ namespace util {
|
||||
virtual ~indenter ();
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
struct indented {
|
||||
indented (const T &_data);
|
||||
const T &data;
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
indented<T>
|
||||
make_indented (const T &_data);
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
class scoped_cwd {
|
||||
public:
|
||||
scoped_cwd ();
|
||||
@ -124,4 +137,11 @@ namespace util {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
std::ostream&
|
||||
operator<< (std::ostream &os, const util::indented<T> &v);
|
||||
|
||||
#include "io.ipp"
|
||||
|
||||
#endif
|
||||
|
29
io.ipp
Normal file
29
io.ipp
Normal file
@ -0,0 +1,29 @@
|
||||
|
||||
#ifdef __UTIL_IO_IPP
|
||||
#error "multiple inclusions"
|
||||
#else
|
||||
#define __UTIL__IO_IPP
|
||||
#endif
|
||||
|
||||
namespace util {
|
||||
template <typename T>
|
||||
indented<T>::indented (const T &_data):
|
||||
data (_data)
|
||||
{ ; }
|
||||
|
||||
|
||||
template <typename T>
|
||||
indented<T>
|
||||
make_indented (const T &_data) {
|
||||
return indented<T> (_data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
std::ostream&
|
||||
operator<< (std::ostream &os, const util::indented<T> &v) {
|
||||
util::indenter raii (os);
|
||||
os << v.data;
|
||||
return os;
|
||||
}
|
Loading…
Reference in New Issue
Block a user