diff options
Diffstat (limited to 'walk.cc')
-rw-r--r-- | walk.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/walk.cc b/walk.cc new file mode 100644 index 00000000..5b923a86 --- /dev/null +++ b/walk.cc @@ -0,0 +1,31 @@ +#include "walk.h" + +namespace ledger { + +class sum_in_account +{ + public: + void operator()(transaction_t * xact) const { + xact->account->value += *xact; + } +}; + +void calc__accounts(account_t * account, + item_predicate<transaction_t>& pred_functor, + unsigned int flags) +{ + sum_in_account functor; + + for (transactions_list::iterator i = account->transactions.begin(); + i != account->transactions.end(); + i++) + if (pred_functor(*i)) + handle_transaction(*i, functor, flags); + + for (accounts_map::iterator i = account->accounts.begin(); + i != account->accounts.end(); + i++) + calc__accounts((*i).second, pred_functor, flags); +} + +} // namespace ledger |