fixed cache by clear transaction flags before writing
This commit is contained in:
parent
5409bc04b8
commit
6048ae7c05
4 changed files with 35 additions and 3 deletions
|
|
@ -253,6 +253,8 @@ account_t * read_binary_account(std::istream& in, account_t * master = NULL)
|
||||||
acct->note = buf;
|
acct->note = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
in.read((char *)&acct->depth, sizeof(acct->depth));
|
||||||
|
|
||||||
in.read((char *)&len, sizeof(len));
|
in.read((char *)&len, sizeof(len));
|
||||||
|
|
||||||
// If all of the subaccounts will be added to a different master
|
// 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)
|
if (len)
|
||||||
out.write(account->note.c_str(), len);
|
out.write(account->note.c_str(), len);
|
||||||
|
|
||||||
|
out.write((char *)&account->depth, sizeof(account->depth));
|
||||||
|
|
||||||
len = account->accounts.size();
|
len = account->accounts.size();
|
||||||
out.write((char *)&len, sizeof(len));
|
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);
|
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));
|
out.write((char *)&count, sizeof(count));
|
||||||
|
|
||||||
for (commodities_map::const_iterator i = commodity_t::commodities.begin();
|
for (commodities_map::const_iterator i = commodity_t::commodities.begin();
|
||||||
i != commodity_t::commodities.end();
|
i != commodity_t::commodities.end();
|
||||||
i++)
|
i++)
|
||||||
write_binary_commodity(out, (*i).second);
|
if (! (*i).first.empty())
|
||||||
|
write_binary_commodity(out, (*i).second);
|
||||||
|
|
||||||
count = journal->entries.size();
|
count = journal->entries.size();
|
||||||
out.write((char *)&count, sizeof(count));
|
out.write((char *)&count, sizeof(count));
|
||||||
|
|
|
||||||
2
ledger.h
2
ledger.h
|
|
@ -100,11 +100,11 @@ class account_t
|
||||||
account_t * parent;
|
account_t * parent;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string note;
|
std::string note;
|
||||||
|
unsigned long depth;
|
||||||
accounts_map accounts;
|
accounts_map accounts;
|
||||||
transactions_list transactions;
|
transactions_list transactions;
|
||||||
balance_pair_t value;
|
balance_pair_t value;
|
||||||
balance_pair_t total;
|
balance_pair_t total;
|
||||||
unsigned long depth;
|
|
||||||
unsigned long ident;
|
unsigned long ident;
|
||||||
|
|
||||||
mutable std::string _fullname;
|
mutable std::string _fullname;
|
||||||
|
|
|
||||||
2
main.cc
2
main.cc
|
|
@ -810,6 +810,8 @@ int main(int argc, char * argv[])
|
||||||
if (const char * p = std::getenv("LEDGER_CACHE")) {
|
if (const char * p = std::getenv("LEDGER_CACHE")) {
|
||||||
std::ofstream outstr(p);
|
std::ofstream outstr(p);
|
||||||
assert(std::getenv("LEDGER"));
|
assert(std::getenv("LEDGER"));
|
||||||
|
clear_transaction_display_flags(journal->entries.begin(),
|
||||||
|
journal->entries.end());
|
||||||
write_binary_journal(outstr, journal.get(), std::getenv("LEDGER"));
|
write_binary_journal(outstr, journal.get(), std::getenv("LEDGER"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
25
walk.h
25
walk.h
|
|
@ -164,6 +164,31 @@ void walk_entries(entries_list::iterator begin,
|
||||||
handle_transaction(*j, functor, disp_pred_functor, flags);
|
handle_transaction(*j, functor, disp_pred_functor, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Function>
|
||||||
|
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<clear_flags>(begin, end, clear_flags());
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Function>
|
template <typename Function>
|
||||||
void walk_transactions(transactions_list::iterator begin,
|
void walk_transactions(transactions_list::iterator begin,
|
||||||
transactions_list::iterator end, Function functor)
|
transactions_list::iterator end, Function functor)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue