Skip to content

Commit

Permalink
[engine.i] move gnc_accounts_and_all_descendants to engine.i
Browse files Browse the repository at this point in the history
  • Loading branch information
christopherlam committed Jun 7, 2024
1 parent 6cac9d0 commit d1807b6
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 24 deletions.
4 changes: 0 additions & 4 deletions bindings/engine-common.i
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,10 @@ AccountList * gnc_account_get_descendants (const Account *account);
%newobject gnc_account_get_descendants_sorted;
AccountList * gnc_account_get_descendants_sorted (const Account *account);

%newobject gnc_accounts_and_all_descendants;
AccountList * gnc_accounts_and_all_descendants (AccountList *accounts);

%ignore gnc_account_get_children;
%ignore gnc_account_get_children_sorted;
%ignore gnc_account_get_descendants;
%ignore gnc_account_get_descendants_sorted;
%ignore gnc_accounts_and_all_descendants;
%include <Account.h>

%include <Transaction.h>
Expand Down
20 changes: 20 additions & 0 deletions bindings/engine.i
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
#include "gncTaxTable.h"
#include "gncVendor.h"

#include <numeric>
#include <unordered_set>
%}
#if defined(SWIGGUILE) //Always C++
%{
Expand All @@ -64,6 +66,8 @@ using AccountVec = std::vector<Account*>;
SplitsVec gnc_get_match_commodity_splits (AccountVec accounts, bool use_end_date,
time64 end_date, gnc_commodity *comm, bool sort);

AccountVec gnc_accounts_and_all_descendants (AccountVec accounts);

extern "C"
{
SCM scm_init_sw_engine_module (void);
Expand Down Expand Up @@ -155,6 +159,22 @@ SplitsVec gnc_get_match_commodity_splits (AccountVec accounts, bool use_end_date
return rv;
}

using AccountSet = std::unordered_set<Account*>;
static void maybe_add_descendants (Account* acc, AccountSet* accset)
{
if (accset->insert (acc).second)
gnc_account_foreach_child (acc, (AccountCb)maybe_add_descendants, accset);
};

AccountVec
gnc_accounts_and_all_descendants (AccountVec accounts)
{
AccountSet accset;
for (auto a : accounts)
maybe_add_descendants (a, &accset);
return AccountVec (accset.begin(), accset.end());
}

%}

/* NB: The object ownership annotations should already cover all the
Expand Down
18 changes: 0 additions & 18 deletions libgnucash/engine/Account.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6383,24 +6383,6 @@ gboolean xaccAccountRegister (void)
return qof_object_register (&account_object_def);
}

using AccountSet = std::unordered_set<Account*>;
static void maybe_add_descendants (Account* acc, gpointer arg)
{
g_return_if_fail (acc);

if (static_cast <AccountSet*> (arg)->insert (acc).second)
std::for_each (GET_PRIVATE(acc)->children.begin(), GET_PRIVATE(acc)->children.end(),
[&](auto acc){ maybe_add_descendants (acc, arg); });
};

GList *
gnc_accounts_and_all_descendants (GList *accounts)
{
AccountSet accset;
g_list_foreach (accounts, (GFunc) maybe_add_descendants, &accset);
return std::accumulate (accset.begin(), accset.end(), (GList*) nullptr, g_list_prepend);
}

/* ======================= UNIT TESTING ACCESS =======================
* The following functions are for unit testing use only.
*/
Expand Down
2 changes: 0 additions & 2 deletions libgnucash/engine/Account.h
Original file line number Diff line number Diff line change
Expand Up @@ -1687,8 +1687,6 @@ typedef enum
const char * dxaccAccountGetQuoteTZ (const Account *account);
/** @} */

GList * gnc_accounts_and_all_descendants (GList *accounts);

/** @name Account parameter names
@{
*/
Expand Down

0 comments on commit d1807b6

Please sign in to comment.