From 6048ae7c05622a83355ad0a87ab1ce512f00b3f3 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Thu, 5 Aug 2004 23:51:20 -0400 Subject: fixed cache by clear transaction flags before writing --- binary.cc | 9 +++++++-- ledger.h | 2 +- main.cc | 2 ++ walk.h | 25 +++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/binary.cc b/binary.cc index 0e9fcd45..ee6bf3f0 100644 --- a/binary.cc +++ b/binary.cc @@ -253,6 +253,8 @@ account_t * read_binary_account(std::istream& in, account_t * master = NULL) acct->note = buf; } + in.read((char *)&acct->depth, sizeof(acct->depth)); + in.read((char *)&len, sizeof(len)); // If all of the subaccounts will be added to a different master @@ -540,6 +542,8 @@ void write_binary_account(std::ostream& out, account_t * account) if (len) out.write(account->note.c_str(), len); + out.write((char *)&account->depth, sizeof(account->depth)); + len = account->accounts.size(); out.write((char *)&len, sizeof(len)); @@ -592,13 +596,14 @@ void write_binary_journal(std::ostream& out, journal_t * journal, write_binary_account(out, journal->master); - unsigned long count = commodity_t::commodities.size(); + unsigned long count = commodity_t::commodities.size() - 1; out.write((char *)&count, sizeof(count)); for (commodities_map::const_iterator i = commodity_t::commodities.begin(); i != commodity_t::commodities.end(); i++) - write_binary_commodity(out, (*i).second); + if (! (*i).first.empty()) + write_binary_commodity(out, (*i).second); count = journal->entries.size(); out.write((char *)&count, sizeof(count)); diff --git a/ledger.h b/ledger.h index 2abf0416..d309a7d6 100644 --- a/ledger.h +++ b/ledger.h @@ -100,11 +100,11 @@ class account_t account_t * parent; std::string name; std::string note; + unsigned long depth; accounts_map accounts; transactions_list transactions; balance_pair_t value; balance_pair_t total; - unsigned long depth; unsigned long ident; mutable std::string _fullname; diff --git a/main.cc b/main.cc index 65cddf27..31bd32e1 100644 --- a/main.cc +++ b/main.cc @@ -810,6 +810,8 @@ int main(int argc, char * argv[]) if (const char * p = std::getenv("LEDGER_CACHE")) { std::ofstream outstr(p); assert(std::getenv("LEDGER")); + clear_transaction_display_flags(journal->entries.begin(), + journal->entries.end()); write_binary_journal(outstr, journal.get(), std::getenv("LEDGER")); } diff --git a/walk.h b/walk.h index 2bc578a1..2cc6f2e3 100644 --- a/walk.h +++ b/walk.h @@ -164,6 +164,31 @@ void walk_entries(entries_list::iterator begin, handle_transaction(*j, functor, disp_pred_functor, flags); } +template +void walk_entries(entries_list::iterator begin, + entries_list::iterator end, Function functor) +{ + for (entries_list::iterator i = begin; i != end; i++) + for (transactions_list::iterator j = (*i)->transactions.begin(); + j != (*i)->transactions.end(); + j++) + functor(*j); +} + +class clear_flags +{ + public: + void operator()(transaction_t * xact) const { + xact->flags &= ~(TRANSACTION_HANDLED | TRANSACTION_DISPLAYED); + } +}; + +inline void clear_transaction_display_flags(entries_list::iterator begin, + entries_list::iterator end) +{ + walk_entries(begin, end, clear_flags()); +} + template void walk_transactions(transactions_list::iterator begin, transactions_list::iterator end, Function functor) -- cgit v1.2.3