Moved xdata clearing code into each type proper
This commit is contained in:
parent
40a430139e
commit
3dc200983d
13 changed files with 48 additions and 62 deletions
|
|
@ -382,6 +382,15 @@ account_t::xdata_t::details_t::operator+=(const details_t& other)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void account_t::clear_xdata()
|
||||||
|
{
|
||||||
|
xdata_ = none;
|
||||||
|
|
||||||
|
foreach (accounts_map::value_type& pair, accounts)
|
||||||
|
if (! pair.second->has_flags(ACCOUNT_TEMP))
|
||||||
|
pair.second->clear_xdata();
|
||||||
|
}
|
||||||
|
|
||||||
value_t account_t::amount(const optional<expr_t&>& expr) const
|
value_t account_t::amount(const optional<expr_t&>& expr) const
|
||||||
{
|
{
|
||||||
if (xdata_ && xdata_->has_flags(ACCOUNT_EXT_VISITED)) {
|
if (xdata_ && xdata_->has_flags(ACCOUNT_EXT_VISITED)) {
|
||||||
|
|
|
||||||
|
|
@ -230,9 +230,7 @@ public:
|
||||||
bool has_xdata() const {
|
bool has_xdata() const {
|
||||||
return xdata_;
|
return xdata_;
|
||||||
}
|
}
|
||||||
void clear_xdata() {
|
void clear_xdata();
|
||||||
xdata_ = none;
|
|
||||||
}
|
|
||||||
xdata_t& xdata() {
|
xdata_t& xdata() {
|
||||||
if (! xdata_)
|
if (! xdata_)
|
||||||
xdata_ = xdata_t();
|
xdata_ = xdata_t();
|
||||||
|
|
|
||||||
|
|
@ -70,19 +70,6 @@ public:
|
||||||
virtual void operator()(post_t&) {}
|
virtual void operator()(post_t&) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Brief
|
|
||||||
*
|
|
||||||
* Long.
|
|
||||||
*/
|
|
||||||
class clear_post_xdata : public item_handler<post_t>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual void operator()(post_t& post) {
|
|
||||||
post.clear_xdata();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class posts_iterator;
|
class posts_iterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -790,19 +777,6 @@ class forecast_posts : public generate_posts
|
||||||
// Account filters
|
// Account filters
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Brief
|
|
||||||
*
|
|
||||||
* Long.
|
|
||||||
*/
|
|
||||||
class clear_account_xdata : public item_handler<account_t>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual void operator()(account_t& acct) {
|
|
||||||
acct.clear_xdata();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class accounts_iterator;
|
class accounts_iterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,23 @@ bool journal_t::remove_xact(xact_t * xact)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void journal_t::clear_xdata()
|
||||||
|
{
|
||||||
|
foreach (xact_t * xact, xacts)
|
||||||
|
if (! xact->has_flags(ITEM_TEMP))
|
||||||
|
xact->clear_xdata();
|
||||||
|
|
||||||
|
foreach (auto_xact_t * xact, auto_xacts)
|
||||||
|
if (! xact->has_flags(ITEM_TEMP))
|
||||||
|
xact->clear_xdata();
|
||||||
|
|
||||||
|
foreach (period_xact_t * xact, period_xacts)
|
||||||
|
if (! xact->has_flags(ITEM_TEMP))
|
||||||
|
xact->clear_xdata();
|
||||||
|
|
||||||
|
master->clear_xdata();
|
||||||
|
}
|
||||||
|
|
||||||
bool journal_t::valid() const
|
bool journal_t::valid() const
|
||||||
{
|
{
|
||||||
if (! master->valid()) {
|
if (! master->valid()) {
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,8 @@ public:
|
||||||
const path * original_file = NULL,
|
const path * original_file = NULL,
|
||||||
bool strict = false);
|
bool strict = false);
|
||||||
|
|
||||||
|
void clear_xdata();
|
||||||
|
|
||||||
bool valid() const;
|
bool valid() const;
|
||||||
|
|
||||||
#if defined(HAVE_BOOST_SERIALIZATION)
|
#if defined(HAVE_BOOST_SERIALIZATION)
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ namespace {
|
||||||
{
|
{
|
||||||
std::istringstream in(str);
|
std::istringstream in(str);
|
||||||
report.session.journal->parse(in, report.session);
|
report.session.journal->parse(in, report.session);
|
||||||
report.session.clean_accounts();
|
report.session.journal->clear_xdata();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xact_t * first = report.session.journal->xacts.front();
|
xact_t * first = report.session.journal->xacts.front();
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,8 @@ void export_journal()
|
||||||
.def("sources", range<return_internal_reference<> >
|
.def("sources", range<return_internal_reference<> >
|
||||||
(&journal_t::sources_begin, &journal_t::sources_end))
|
(&journal_t::sources_begin, &journal_t::sources_end))
|
||||||
|
|
||||||
|
.def("clear_xdata", &journal_t::clear_xdata)
|
||||||
|
|
||||||
.def("valid", &journal_t::valid)
|
.def("valid", &journal_t::valid)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,8 @@ void export_xact()
|
||||||
|
|
||||||
.def("lookup", &xact_t::lookup)
|
.def("lookup", &xact_t::lookup)
|
||||||
|
|
||||||
|
.def("clear_xdata", &xact_t::clear_xdata)
|
||||||
|
|
||||||
.def("valid", &xact_t::valid)
|
.def("valid", &xact_t::valid)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ void report_t::posts_report(post_handler_ptr handler)
|
||||||
{
|
{
|
||||||
journal_posts_iterator walker(*session.journal.get());
|
journal_posts_iterator walker(*session.journal.get());
|
||||||
pass_down_posts(chain_post_handlers(*this, handler), walker);
|
pass_down_posts(chain_post_handlers(*this, handler), walker);
|
||||||
session.clean_posts();
|
session.journal->clear_xdata();
|
||||||
}
|
}
|
||||||
|
|
||||||
void report_t::generate_report(post_handler_ptr handler)
|
void report_t::generate_report(post_handler_ptr handler)
|
||||||
|
|
@ -70,7 +70,7 @@ void report_t::xact_report(post_handler_ptr handler, xact_t& xact)
|
||||||
{
|
{
|
||||||
xact_posts_iterator walker(xact);
|
xact_posts_iterator walker(xact);
|
||||||
pass_down_posts(chain_post_handlers(*this, handler), walker);
|
pass_down_posts(chain_post_handlers(*this, handler), walker);
|
||||||
session.clean_posts(xact);
|
xact.clear_xdata();
|
||||||
}
|
}
|
||||||
|
|
||||||
void report_t::accounts_report(acct_handler_ptr handler)
|
void report_t::accounts_report(acct_handler_ptr handler)
|
||||||
|
|
@ -101,15 +101,14 @@ void report_t::accounts_report(acct_handler_ptr handler)
|
||||||
else
|
else
|
||||||
pass_down_accounts(handler, *iter.get());
|
pass_down_accounts(handler, *iter.get());
|
||||||
|
|
||||||
session.clean_posts();
|
session.journal->clear_xdata();
|
||||||
session.clean_accounts();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void report_t::commodities_report(post_handler_ptr handler)
|
void report_t::commodities_report(post_handler_ptr handler)
|
||||||
{
|
{
|
||||||
posts_commodities_iterator walker(*session.journal.get());
|
posts_commodities_iterator walker(*session.journal.get());
|
||||||
pass_down_posts(chain_post_handlers(*this, handler), walker);
|
pass_down_posts(chain_post_handlers(*this, handler), walker);
|
||||||
session.clean_posts();
|
session.journal->clear_xdata();
|
||||||
}
|
}
|
||||||
|
|
||||||
value_t report_t::fn_amount_expr(call_scope_t& scope)
|
value_t report_t::fn_amount_expr(call_scope_t& scope)
|
||||||
|
|
|
||||||
|
|
@ -224,25 +224,6 @@ void session_t::close_journal_files()
|
||||||
amount_t::initialize(journal->commodity_pool);
|
amount_t::initialize(journal->commodity_pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_t::clean_posts()
|
|
||||||
{
|
|
||||||
journal_posts_iterator walker(*journal.get());
|
|
||||||
pass_down_posts(post_handler_ptr(new clear_post_xdata), walker);
|
|
||||||
}
|
|
||||||
|
|
||||||
void session_t::clean_posts(xact_t& xact)
|
|
||||||
{
|
|
||||||
xact_posts_iterator walker(xact);
|
|
||||||
pass_down_posts(post_handler_ptr(new clear_post_xdata), walker);
|
|
||||||
}
|
|
||||||
|
|
||||||
void session_t::clean_accounts()
|
|
||||||
{
|
|
||||||
basic_accounts_iterator acct_walker(*journal->master);
|
|
||||||
pass_down_accounts(acct_handler_ptr(new clear_account_xdata), acct_walker);
|
|
||||||
journal->master->clear_xdata();
|
|
||||||
}
|
|
||||||
|
|
||||||
option_t<session_t> * session_t::lookup_option(const char * p)
|
option_t<session_t> * session_t::lookup_option(const char * p)
|
||||||
{
|
{
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
|
|
|
||||||
|
|
@ -93,14 +93,6 @@ public:
|
||||||
void read_journal_files();
|
void read_journal_files();
|
||||||
void close_journal_files();
|
void close_journal_files();
|
||||||
|
|
||||||
void clean_posts();
|
|
||||||
void clean_posts(xact_t& xact);
|
|
||||||
void clean_accounts();
|
|
||||||
void clean_all() {
|
|
||||||
clean_posts();
|
|
||||||
clean_accounts();
|
|
||||||
}
|
|
||||||
|
|
||||||
void report_options(std::ostream& out)
|
void report_options(std::ostream& out)
|
||||||
{
|
{
|
||||||
HANDLER(account_).report(out);
|
HANDLER(account_).report(out);
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,13 @@ bool xact_base_t::remove_post(post_t * post)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void xact_base_t::clear_xdata()
|
||||||
|
{
|
||||||
|
foreach (post_t * post, posts)
|
||||||
|
if (! post->has_flags(ITEM_TEMP))
|
||||||
|
post->clear_xdata();
|
||||||
|
}
|
||||||
|
|
||||||
bool xact_base_t::finalize()
|
bool xact_base_t::finalize()
|
||||||
{
|
{
|
||||||
// Scan through and compute the total balance for the xact. This is used
|
// Scan through and compute the total balance for the xact. This is used
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,9 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool finalize();
|
virtual bool finalize();
|
||||||
|
|
||||||
|
void clear_xdata();
|
||||||
|
|
||||||
virtual bool valid() const {
|
virtual bool valid() const {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue