Skip to content

Commit 7226b67

Browse files
committed
Mortgage Assistant: Change LoanData.repAmount into a std::string
Allowing the removal of much GString gyration.
1 parent c22bb10 commit 7226b67

File tree

1 file changed

+44
-88
lines changed

1 file changed

+44
-88
lines changed

gnucash/gnome/assistant-loan.cpp

+44-88
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ typedef struct LoanData_
202202
int numMonRemain;
203203

204204
char *repMemo;
205-
char *repAmount;
205+
std::string repAmount;
206206
Account *repFromAcct;
207207
Account *repPriAcct;
208208
Account *repIntAcct;
@@ -365,9 +365,9 @@ static void loan_rev_sched_list_free( gpointer data, gpointer user_data );
365365
static void loan_rev_hash_to_list( gpointer key, gpointer val, gpointer user_data );
366366
static void loan_rev_hash_free_date_keys( gpointer key, gpointer val, gpointer user_data );
367367

368-
static void loan_get_pmt_formula( LoanAssistantData *ldd, GString *gstr );
369-
static void loan_get_ppmt_formula( LoanAssistantData *ldd, GString *gstr );
370-
static void loan_get_ipmt_formula( LoanAssistantData *ldd, GString *gstr );
368+
static std::string loan_get_pmt_formula(LoanAssistantData *ldd);
369+
static std::string loan_get_ppmt_formula(LoanAssistantData *ldd);
370+
static std::string loan_get_ipmt_formula(LoanAssistantData *ldd);
371371
static float loan_apr_to_simple_formula (double rate, double pmt_periods, double comp_periods);
372372

373373
static void loan_create_sxes( LoanAssistantData *ldd );
@@ -436,9 +436,6 @@ loan_assistant_window_destroy_cb( GtkWidget *object, gpointer user_data )
436436
g_free( ldd->ld.repayOpts );
437437
g_free( ldd->repayOptsUI );
438438

439-
if ( ldd->ld.repAmount )
440-
g_free( ldd->ld.repAmount );
441-
442439
g_date_free( ldd->ld.repStartDate );
443440
}
444441

@@ -924,7 +921,6 @@ loan_assistant_data_init( LoanAssistantData *ldd )
924921
}
925922

926923
ldd->ld.repMemo = g_strdup( _("Loan") );
927-
ldd->ld.repAmount = NULL;
928924
ldd->ld.repStartDate = g_date_new();
929925
ldd->ld.repayOptCount = optCount;
930926
ldd->ld.repayOpts = g_new0( RepayOptData*, optCount );
@@ -1328,22 +1324,14 @@ void
13281324
loan_rep_prep( GtkAssistant *assistant, gpointer user_data )
13291325
{
13301326
LoanAssistantData *ldd = static_cast<LoanAssistantData*> (user_data);
1331-
GString *str;
1332-
1333-
if ( ldd->ld.repAmount )
1334-
{
1335-
g_free( ldd->ld.repAmount );
1336-
}
13371327

1338-
str = g_string_sized_new( 64 );
1339-
loan_get_pmt_formula( ldd, str);
1340-
ldd->ld.repAmount = g_string_free (str, false);
1328+
ldd->ld.repAmount = loan_get_pmt_formula(ldd);
13411329

13421330
if ( ldd->ld.repMemo )
13431331
gtk_entry_set_text( ldd->repTxnName, ldd->ld.repMemo );
13441332

1345-
if ( ldd->ld.repAmount )
1346-
gtk_entry_set_text( ldd->repAmtEntry, ldd->ld.repAmount );
1333+
if (!ldd->ld.repAmount.empty() )
1334+
gtk_entry_set_text(ldd->repAmtEntry, ldd->ld.repAmount.c_str());
13471335

13481336
gnc_account_sel_set_account( ldd->repAssetsFromGAS, ldd->ld.repFromAcct, FALSE );
13491337
gnc_account_sel_set_account( ldd->repPrincToGAS, ldd->ld.repPriAcct, FALSE );
@@ -1423,10 +1411,9 @@ loan_rep_page_save( GtkAssistant *assistant, gpointer user_data )
14231411
ldd->ld.repMemo =
14241412
gtk_editable_get_chars( GTK_EDITABLE(ldd->repTxnName), 0, -1 );
14251413

1426-
if ( ldd->ld.repAmount )
1427-
g_free( ldd->ld.repAmount );
1428-
ldd->ld.repAmount =
1429-
gtk_editable_get_chars( GTK_EDITABLE(ldd->repAmtEntry), 0, -1 );
1414+
1415+
ldd->ld.repAmount.replace(0, ldd->ld.repAmount.size(),
1416+
gtk_editable_get_chars(GTK_EDITABLE(ldd->repAmtEntry), 0, -1));
14301417

14311418
ldd->ld.repFromAcct =
14321419
gnc_account_sel_get_account( ldd->repAssetsFromGAS );
@@ -2080,16 +2067,12 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
20802067
/* Do the master repayment */
20812068
{
20822069
GDate curDate, nextDate;
2083-
GString *pmtFormula, *ppmtFormula, *ipmtFormula;
20842070
int i;
20852071
GHashTable *ivar;
20862072

2087-
pmtFormula = g_string_sized_new( 64 );
2088-
loan_get_pmt_formula( ldd, pmtFormula );
2089-
ppmtFormula = g_string_sized_new( 64 );
2090-
loan_get_ppmt_formula( ldd, ppmtFormula );
2091-
ipmtFormula = g_string_sized_new( 64 );
2092-
loan_get_ipmt_formula( ldd, ipmtFormula );
2073+
auto pmtFormula = loan_get_pmt_formula(ldd);
2074+
auto ppmtFormula = loan_get_ppmt_formula(ldd);
2075+
auto ipmtFormula = loan_get_ipmt_formula(ldd);
20932076

20942077
ivar = g_hash_table_new( g_str_hash, g_str_equal );
20952078
g_date_clear( &curDate, 1 );
@@ -2134,7 +2117,7 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
21342117
g_hash_table_insert( ivar, (gpointer) "i", &ival );
21352118

21362119
if ( ! gnc_exp_parser_parse_separate_vars(
2137-
pmtFormula->str, &val, &eloc, ivar ) )
2120+
pmtFormula.c_str(), &val, &eloc, ivar ) )
21382121
{
21392122
PERR( "pmt Parsing error at %s", eloc );
21402123
continue;
@@ -2143,7 +2126,7 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
21432126
rowNumData[0] = val;
21442127

21452128
if ( ! gnc_exp_parser_parse_separate_vars(
2146-
ppmtFormula->str, &val, &eloc, ivar ) )
2129+
ppmtFormula.c_str(), &val, &eloc, ivar ) )
21472130
{
21482131
PERR( "ppmt Parsing error at %s", eloc );
21492132
continue;
@@ -2152,7 +2135,7 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
21522135
rowNumData[1] = val;
21532136

21542137
if ( ! gnc_exp_parser_parse_separate_vars(
2155-
ipmtFormula->str, &val, &eloc, ivar ) )
2138+
ipmtFormula.c_str(), &val, &eloc, ivar ) )
21562139
{
21572140
PERR( "ipmt Parsing error at %s", eloc );
21582141
continue;
@@ -2161,10 +2144,6 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
21612144
rowNumData[2] = val;
21622145
}
21632146

2164-
g_string_free( ipmtFormula, TRUE );
2165-
g_string_free( ppmtFormula, TRUE );
2166-
g_string_free( pmtFormula, TRUE );
2167-
21682147
g_hash_table_destroy( ivar );
21692148
}
21702149

@@ -2434,12 +2413,10 @@ periods_per_year( LoanAssistantData *ldd)
24342413
return {ppy, periods};
24352414
}
24362415

2437-
static
2438-
void
2439-
loan_get_formula_internal( LoanAssistantData *ldd, GString *gstr, const gchar *tpl )
2416+
static std::string
2417+
loan_get_formula_internal( LoanAssistantData *ldd, const gchar *tpl )
24402418
{
24412419
g_assert( ldd != NULL );
2442-
g_assert( gstr != NULL );
24432420

24442421
auto [ppy, periods] = periods_per_year(ldd);
24452422
gdouble pass_thru_rate = ldd->ld.interestRate / 100.0;
@@ -2493,39 +2470,36 @@ loan_get_formula_internal( LoanAssistantData *ldd, GString *gstr, const gchar *t
24932470
period_base_str % periods_str % principal_str).str();
24942471
else
24952472
formula = (bl::format (tpl) % period_rate_str % periods_str % principal_str).str();
2496-
g_string_append (gstr, formula.c_str());
2473+
return formula;
24972474
}
24982475

2499-
static
2500-
void
2501-
loan_get_pmt_formula( LoanAssistantData *ldd, GString *gstr )
2476+
static std::string
2477+
loan_get_pmt_formula(LoanAssistantData *ldd)
25022478
{
25032479
if (ldd->ld.rateType == GNC_IRATE_SIMPLE)
2504-
loan_get_formula_internal (ldd, gstr, "pmt( {1} / {2} : {3} : {4} : 0 : 0 )");
2480+
return loan_get_formula_internal (ldd, "pmt( {1} / {2} : {3} : {4} : 0 : 0 )");
25052481
else
2506-
loan_get_formula_internal (ldd, gstr, "pmt( {1} : {2} : {3} : 0 : 0 )");
2482+
return loan_get_formula_internal (ldd, "pmt( {1} : {2} : {3} : 0 : 0 )");
25072483
}
25082484

25092485

2510-
static
2511-
void
2512-
loan_get_ppmt_formula( LoanAssistantData *ldd, GString *gstr )
2486+
static std::string
2487+
loan_get_ppmt_formula(LoanAssistantData *ldd)
25132488
{
25142489
if (ldd->ld.rateType == GNC_IRATE_SIMPLE)
2515-
loan_get_formula_internal (ldd, gstr, "ppmt( {1} / {2} : i : {3} : {4} : 0 : 0 )");
2490+
return loan_get_formula_internal (ldd, "ppmt( {1} / {2} : i : {3} : {4} : 0 : 0 )");
25162491
else
2517-
loan_get_formula_internal (ldd, gstr, "ppmt( {1} : i : {2} : {3} : 0 : 0 )");
2492+
return loan_get_formula_internal (ldd, "ppmt( {1} : i : {2} : {3} : 0 : 0 )");
25182493
}
25192494

25202495

2521-
static
2522-
void
2523-
loan_get_ipmt_formula( LoanAssistantData *ldd, GString *gstr )
2496+
static std::string
2497+
loan_get_ipmt_formula(LoanAssistantData *ldd)
25242498
{
25252499
if (ldd->ld.rateType == GNC_IRATE_SIMPLE)
2526-
loan_get_formula_internal (ldd, gstr, "ipmt( {1} / {2} : i : {3} : {4} : 0 : 0 )");
2500+
return loan_get_formula_internal (ldd, "ipmt( {1} / {2} : i : {3} : {4} : 0 : 0 )");
25272501
else
2528-
loan_get_formula_internal (ldd, gstr, "ipmt( {1} : i : {2} : {3} : 0 : 0 )");
2502+
return loan_get_formula_internal (ldd, "ipmt( {1} : i : {2} : {3} : 0 : 0 )");
25292503
}
25302504

25312505
/******************* Scheduled Transaction Functions ********************/
@@ -2848,7 +2822,6 @@ loan_create_sxes( LoanAssistantData *ldd )
28482822
int i;
28492823
TTInfoPtr ttxn;
28502824
TTSplitInfoPtr ttsi;
2851-
GString *gstr;
28522825

28532826
paymentSX = g_new0( toCreateSX, 1 );
28542827
paymentSX->name = g_strdup(ldd->ld.repMemo);
@@ -2908,14 +2881,13 @@ loan_create_sxes( LoanAssistantData *ldd )
29082881
{
29092882
Account *realSrcAcct = srcAcct;
29102883
srcAcct = ldd->ld.escrowAcct;
2911-
gstr = g_string_sized_new( 32 );
2912-
loan_get_pmt_formula( ldd, gstr );
2884+
auto formula = loan_get_pmt_formula(ldd);
29132885
/* ttxn.splits += split( realSrcAcct, -pmt ); */
29142886
{
29152887
ttsi = std::make_shared<TTSplitInfo>();
29162888
ttsi->set_memo (ldd->ld.repMemo);
29172889
ttsi->set_account (realSrcAcct);
2918-
ttsi->set_credit_formula (gstr->str);
2890+
ttsi->set_credit_formula (formula.c_str());
29192891
ttxn->append_template_split (ttsi);
29202892
ttsi = NULL;
29212893
}
@@ -2924,12 +2896,10 @@ loan_create_sxes( LoanAssistantData *ldd )
29242896
ttsi = std::make_shared<TTSplitInfo>();
29252897
ttsi->set_memo (ldd->ld.repMemo);
29262898
ttsi->set_account (ldd->ld.escrowAcct);
2927-
ttsi->set_debit_formula (gstr->str);
2899+
ttsi->set_debit_formula (formula.c_str());
29282900
ttxn->append_template_split (ttsi);
29292901
ttsi = NULL;
29302902
}
2931-
g_string_free( gstr, TRUE );
2932-
gstr = NULL;
29332903
paymentSX->escrowTxn = std::make_shared<TTInfo>();
29342904
paymentSX->escrowTxn->set_currency (gnc_default_currency());
29352905

@@ -2946,60 +2916,48 @@ loan_create_sxes( LoanAssistantData *ldd )
29462916
{
29472917
ttsi = std::make_shared<TTSplitInfo>();
29482918
{
2949-
gstr = g_string_new( ldd->ld.repMemo );
2919+
auto gstr = g_string_new( ldd->ld.repMemo );
29502920
g_string_append_printf( gstr, " - %s",
29512921
_("Payment") );
29522922
ttsi->set_memo (gstr->str);
29532923
g_string_free( gstr, TRUE );
2954-
gstr = NULL;
29552924
}
29562925
ttsi->set_account (srcAcct);
2957-
gstr = g_string_sized_new( 32 );
2958-
loan_get_pmt_formula( ldd, gstr );
2959-
ttsi->set_credit_formula (gstr->str);
2926+
auto formula = loan_get_pmt_formula(ldd);
2927+
ttsi->set_credit_formula (formula.c_str());
29602928
ttxn->append_template_split (ttsi);
2961-
g_string_free( gstr, TRUE );
2962-
gstr = NULL;
29632929
ttsi = NULL;
29642930
}
29652931
/* ttxn.splits += split( ldd->ld.repPriAcct, +ppmt ); */
29662932
{
29672933
ttsi = std::make_shared<TTSplitInfo>();
29682934
{
2969-
gstr = g_string_new( ldd->ld.repMemo );
2935+
auto gstr = g_string_new( ldd->ld.repMemo );
29702936
g_string_append_printf( gstr, " - %s",
29712937
_("Principal") );
29722938
ttsi->set_memo (gstr->str);
29732939
g_string_free( gstr, TRUE );
2974-
gstr = NULL;
29752940
}
29762941
ttsi->set_account (ldd->ld.repPriAcct);
2977-
gstr = g_string_sized_new( 32 );
2978-
loan_get_ppmt_formula( ldd, gstr );
2979-
ttsi->set_debit_formula (gstr->str);
2942+
auto formula = loan_get_ppmt_formula(ldd);
2943+
ttsi->set_debit_formula (formula.c_str());
29802944
ttxn->append_template_split (ttsi);
2981-
g_string_free( gstr, TRUE );
2982-
gstr = NULL;
29832945
ttsi = NULL;
29842946
}
29852947
/* ttxn.splits += split( ldd->ld.repIntAcct, +ipmt ); */
29862948
{
29872949
ttsi = std::make_shared<TTSplitInfo>();
29882950
{
2989-
gstr = g_string_new( ldd->ld.repMemo );
2951+
auto gstr = g_string_new( ldd->ld.repMemo );
29902952
g_string_append_printf( gstr, " - %s",
29912953
_("Interest") );
29922954
ttsi->set_memo (gstr->str);
29932955
g_string_free( gstr, TRUE );
2994-
gstr = NULL;
29952956
}
29962957
ttsi->set_account (ldd->ld.repIntAcct);
2997-
gstr = g_string_sized_new( 32 );
2998-
loan_get_ipmt_formula( ldd, gstr );
2999-
ttsi->set_debit_formula (gstr->str);
2958+
auto formula = loan_get_ipmt_formula(ldd);
2959+
ttsi->set_debit_formula (formula.c_str());
30002960
ttxn->append_template_split (ttsi);
3001-
g_string_free( gstr, TRUE );
3002-
gstr = NULL;
30032961
ttsi = NULL;
30042962
}
30052963
}
@@ -3013,7 +2971,7 @@ loan_create_sxes( LoanAssistantData *ldd )
30132971
if ( rod->schedule != NULL )
30142972
{
30152973
tcSX = g_new0( toCreateSX, 1 );
3016-
gstr = g_string_new( ldd->ld.repMemo );
2974+
auto gstr = g_string_new( ldd->ld.repMemo );
30172975
g_string_append_printf( gstr, " - %s",
30182976
rod->name );
30192977
tcSX->name = g_strdup(gstr->str);
@@ -3037,8 +2995,6 @@ loan_create_sxes( LoanAssistantData *ldd )
30372995
tcSX->escrowTxn->set_description(gstr->str);
30382996

30392997
g_string_free( gstr, TRUE );
3040-
gstr = NULL;
3041-
30422998
repaySXes = g_list_prepend (repaySXes, tcSX);
30432999

30443000
}

0 commit comments

Comments
 (0)