mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
[engine.i] move gnc_accounts_and_all_descendants to engine.i
This commit is contained in:
parent
6cac9d0ebb
commit
d1807b6c15
@ -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>
|
||||
|
@ -54,6 +54,8 @@
|
||||
#include "gncTaxTable.h"
|
||||
#include "gncVendor.h"
|
||||
|
||||
#include <numeric>
|
||||
#include <unordered_set>
|
||||
%}
|
||||
#if defined(SWIGGUILE) //Always C++
|
||||
%{
|
||||
@ -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);
|
||||
@ -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
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -1687,8 +1687,6 @@ typedef enum
|
||||
const char * dxaccAccountGetQuoteTZ (const Account *account);
|
||||
/** @} */
|
||||
|
||||
GList * gnc_accounts_and_all_descendants (GList *accounts);
|
||||
|
||||
/** @name Account parameter names
|
||||
@{
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user