Added pystream_handler_wrap class, which wraps an item_handler taking
a std::ostream so that it can take a PyObject* instead. Relies on pyfstream.h, which allows Python file objects to be treating as I/O streams.
This commit is contained in:
parent
bb444b740f
commit
16e449dc05
1 changed files with 38 additions and 1 deletions
39
format.h
39
format.h
|
|
@ -7,7 +7,8 @@
|
||||||
|
|
||||||
namespace ledger {
|
namespace ledger {
|
||||||
|
|
||||||
std::string truncated(const std::string& str, unsigned int width);
|
std::string truncated(const std::string& str, unsigned int width,
|
||||||
|
const int style = 2);
|
||||||
|
|
||||||
std::string partial_account_name(const account_t& account,
|
std::string partial_account_name(const account_t& account,
|
||||||
const unsigned int start_depth);
|
const unsigned int start_depth);
|
||||||
|
|
@ -198,4 +199,40 @@ class format_equity : public item_handler<account_t>
|
||||||
|
|
||||||
} // namespace ledger
|
} // namespace ledger
|
||||||
|
|
||||||
|
#ifdef USE_BOOST_PYTHON
|
||||||
|
|
||||||
|
#include "pyfstream.h"
|
||||||
|
|
||||||
|
template <typename T, typename U, typename V = int, typename W = int>
|
||||||
|
struct pystream_handler_wrap : public ledger::item_handler<U>
|
||||||
|
{
|
||||||
|
PyFileObject * file;
|
||||||
|
pyofstream * output;
|
||||||
|
|
||||||
|
T handler;
|
||||||
|
|
||||||
|
pystream_handler_wrap(PyObject * file_)
|
||||||
|
: file((PyFileObject *)file_), output(new pyofstream(file)),
|
||||||
|
handler(*output) {}
|
||||||
|
pystream_handler_wrap(PyObject * file_, const V& arg)
|
||||||
|
: file((PyFileObject *)file_), output(new pyofstream(file)),
|
||||||
|
handler(*output, arg) {}
|
||||||
|
pystream_handler_wrap(PyObject * file_, const V& arg1, const W& arg2)
|
||||||
|
: file((PyFileObject *)file_), output(new pyofstream(file)),
|
||||||
|
handler(*output, arg1, arg2) {}
|
||||||
|
|
||||||
|
virtual ~pystream_handler_wrap() {
|
||||||
|
delete output;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void flush() {
|
||||||
|
handler.flush();
|
||||||
|
}
|
||||||
|
virtual void operator()(U& item) {
|
||||||
|
handler.operator()(item);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // USE_BOOST_PYTHON
|
||||||
|
|
||||||
#endif // _REPORT_H
|
#endif // _REPORT_H
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue