mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-29 04:04:07 -06:00
[Split.c] xaccSplitListGetUniqueTransactionsReversed
Same as xaccSplitListGetUniqueTransactions but doesn't reverse the list prior to returning. To be used by gnc-tree-model-split-reg.c Several optimizations * doesn't call g_list_find and g_list_append for every iteration * uses g_hash_table to cache list of txns already added instead of g_list_find * does not reverse the result, thereby returning a reversed list.
This commit is contained in:
parent
0a22f688a6
commit
e79db92d8d
@ -893,21 +893,32 @@ xaccSplitEqual(const Split *sa, const Split *sb,
|
|||||||
* xaccSplitListGetUniqueTransactions
|
* xaccSplitListGetUniqueTransactions
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
GList *
|
GList *
|
||||||
xaccSplitListGetUniqueTransactions(const GList *splits)
|
xaccSplitListGetUniqueTransactionsReversed (const GList *splits)
|
||||||
{
|
{
|
||||||
const GList *snode;
|
GHashTable *txn_hash = g_hash_table_new (NULL, NULL);
|
||||||
GList *transList = NULL;
|
GList *transList = NULL;
|
||||||
|
const GList *snode;
|
||||||
|
|
||||||
for(snode = splits; snode; snode = snode->next)
|
for (snode = splits; snode; snode = snode->next)
|
||||||
{
|
{
|
||||||
Transaction *trans = xaccSplitGetParent((Split *)(snode->data));
|
Transaction *trans = xaccSplitGetParent((Split *)(snode->data));
|
||||||
|
|
||||||
GList *item = g_list_find (transList, trans);
|
if (g_hash_table_contains (txn_hash, trans))
|
||||||
if (item == NULL)
|
continue;
|
||||||
transList = g_list_append (transList, trans);
|
|
||||||
|
g_hash_table_insert (txn_hash, trans, NULL);
|
||||||
|
transList = g_list_prepend (transList, trans);
|
||||||
}
|
}
|
||||||
|
g_hash_table_destroy (txn_hash);
|
||||||
return transList;
|
return transList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
xaccSplitListGetUniqueTransactions(const GList *splits)
|
||||||
|
{
|
||||||
|
return g_list_reverse (xaccSplitListGetUniqueTransactionsReversed (splits));
|
||||||
|
}
|
||||||
|
|
||||||
/*################## Added for Reg2 #################*/
|
/*################## Added for Reg2 #################*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -359,6 +359,7 @@ Split * xaccSplitLookup (const GncGUID *guid, QofBook *book);
|
|||||||
|
|
||||||
/*################## Added for Reg2 #################*/
|
/*################## Added for Reg2 #################*/
|
||||||
/* Get a GList of unique transactions containing the given list of Splits. */
|
/* Get a GList of unique transactions containing the given list of Splits. */
|
||||||
|
GList *xaccSplitListGetUniqueTransactionsReversed (const GList *splits);
|
||||||
GList *xaccSplitListGetUniqueTransactions(const GList *splits);
|
GList *xaccSplitListGetUniqueTransactions(const GList *splits);
|
||||||
/*################## Added for Reg2 #################*/
|
/*################## Added for Reg2 #################*/
|
||||||
/** Add a peer split to this split's lot-split list.
|
/** Add a peer split to this split's lot-split list.
|
||||||
|
Loading…
Reference in New Issue
Block a user