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 {
|
||||
|
||||
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,
|
||||
const unsigned int start_depth);
|
||||
|
|
@ -198,4 +199,40 @@ class format_equity : public item_handler<account_t>
|
|||
|
||||
} // 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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue