@@ -202,7 +202,7 @@ typedef struct LoanData_
202
202
int numMonRemain;
203
203
204
204
char *repMemo;
205
- char * repAmount;
205
+ std::string repAmount;
206
206
Account *repFromAcct;
207
207
Account *repPriAcct;
208
208
Account *repIntAcct;
@@ -365,9 +365,9 @@ static void loan_rev_sched_list_free( gpointer data, gpointer user_data );
365
365
static void loan_rev_hash_to_list ( gpointer key, gpointer val, gpointer user_data );
366
366
static void loan_rev_hash_free_date_keys ( gpointer key, gpointer val, gpointer user_data );
367
367
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);
371
371
static float loan_apr_to_simple_formula (double rate, double pmt_periods, double comp_periods);
372
372
373
373
static void loan_create_sxes ( LoanAssistantData *ldd );
@@ -436,9 +436,6 @@ loan_assistant_window_destroy_cb( GtkWidget *object, gpointer user_data )
436
436
g_free ( ldd->ld .repayOpts );
437
437
g_free ( ldd->repayOptsUI );
438
438
439
- if ( ldd->ld .repAmount )
440
- g_free ( ldd->ld .repAmount );
441
-
442
439
g_date_free ( ldd->ld .repStartDate );
443
440
}
444
441
@@ -924,7 +921,6 @@ loan_assistant_data_init( LoanAssistantData *ldd )
924
921
}
925
922
926
923
ldd->ld .repMemo = g_strdup ( _ (" Loan" ) );
927
- ldd->ld .repAmount = NULL ;
928
924
ldd->ld .repStartDate = g_date_new ();
929
925
ldd->ld .repayOptCount = optCount;
930
926
ldd->ld .repayOpts = g_new0 ( RepayOptData*, optCount );
@@ -1328,22 +1324,14 @@ void
1328
1324
loan_rep_prep ( GtkAssistant *assistant, gpointer user_data )
1329
1325
{
1330
1326
LoanAssistantData *ldd = static_cast <LoanAssistantData*> (user_data);
1331
- GString *str;
1332
-
1333
- if ( ldd->ld .repAmount )
1334
- {
1335
- g_free ( ldd->ld .repAmount );
1336
- }
1337
1327
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);
1341
1329
1342
1330
if ( ldd->ld .repMemo )
1343
1331
gtk_entry_set_text ( ldd->repTxnName , ldd->ld .repMemo );
1344
1332
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 () );
1347
1335
1348
1336
gnc_account_sel_set_account ( ldd->repAssetsFromGAS , ldd->ld .repFromAcct , FALSE );
1349
1337
gnc_account_sel_set_account ( ldd->repPrincToGAS , ldd->ld .repPriAcct , FALSE );
@@ -1423,10 +1411,9 @@ loan_rep_page_save( GtkAssistant *assistant, gpointer user_data )
1423
1411
ldd->ld .repMemo =
1424
1412
gtk_editable_get_chars ( GTK_EDITABLE (ldd->repTxnName ), 0 , -1 );
1425
1413
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 ));
1430
1417
1431
1418
ldd->ld .repFromAcct =
1432
1419
gnc_account_sel_get_account ( ldd->repAssetsFromGAS );
@@ -2080,16 +2067,12 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
2080
2067
/* Do the master repayment */
2081
2068
{
2082
2069
GDate curDate, nextDate;
2083
- GString *pmtFormula, *ppmtFormula, *ipmtFormula;
2084
2070
int i;
2085
2071
GHashTable *ivar;
2086
2072
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);
2093
2076
2094
2077
ivar = g_hash_table_new ( g_str_hash, g_str_equal );
2095
2078
g_date_clear ( &curDate, 1 );
@@ -2134,7 +2117,7 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
2134
2117
g_hash_table_insert ( ivar, (gpointer) " i" , &ival );
2135
2118
2136
2119
if ( ! gnc_exp_parser_parse_separate_vars (
2137
- pmtFormula-> str , &val, &eloc, ivar ) )
2120
+ pmtFormula. c_str () , &val, &eloc, ivar ) )
2138
2121
{
2139
2122
PERR ( " pmt Parsing error at %s" , eloc );
2140
2123
continue ;
@@ -2143,7 +2126,7 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
2143
2126
rowNumData[0 ] = val;
2144
2127
2145
2128
if ( ! gnc_exp_parser_parse_separate_vars (
2146
- ppmtFormula-> str , &val, &eloc, ivar ) )
2129
+ ppmtFormula. c_str () , &val, &eloc, ivar ) )
2147
2130
{
2148
2131
PERR ( " ppmt Parsing error at %s" , eloc );
2149
2132
continue ;
@@ -2152,7 +2135,7 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
2152
2135
rowNumData[1 ] = val;
2153
2136
2154
2137
if ( ! gnc_exp_parser_parse_separate_vars (
2155
- ipmtFormula-> str , &val, &eloc, ivar ) )
2138
+ ipmtFormula. c_str () , &val, &eloc, ivar ) )
2156
2139
{
2157
2140
PERR ( " ipmt Parsing error at %s" , eloc );
2158
2141
continue ;
@@ -2161,10 +2144,6 @@ loan_rev_recalc_schedule( LoanAssistantData *ldd )
2161
2144
rowNumData[2 ] = val;
2162
2145
}
2163
2146
2164
- g_string_free ( ipmtFormula, TRUE );
2165
- g_string_free ( ppmtFormula, TRUE );
2166
- g_string_free ( pmtFormula, TRUE );
2167
-
2168
2147
g_hash_table_destroy ( ivar );
2169
2148
}
2170
2149
@@ -2434,12 +2413,10 @@ periods_per_year( LoanAssistantData *ldd)
2434
2413
return {ppy, periods};
2435
2414
}
2436
2415
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 )
2440
2418
{
2441
2419
g_assert ( ldd != NULL );
2442
- g_assert ( gstr != NULL );
2443
2420
2444
2421
auto [ppy, periods] = periods_per_year (ldd);
2445
2422
gdouble pass_thru_rate = ldd->ld .interestRate / 100.0 ;
@@ -2493,39 +2470,36 @@ loan_get_formula_internal( LoanAssistantData *ldd, GString *gstr, const gchar *t
2493
2470
period_base_str % periods_str % principal_str).str ();
2494
2471
else
2495
2472
formula = (bl::format (tpl) % period_rate_str % periods_str % principal_str).str ();
2496
- g_string_append (gstr, formula. c_str ()) ;
2473
+ return formula;
2497
2474
}
2498
2475
2499
- static
2500
- void
2501
- loan_get_pmt_formula ( LoanAssistantData *ldd, GString *gstr )
2476
+ static std::string
2477
+ loan_get_pmt_formula (LoanAssistantData *ldd)
2502
2478
{
2503
2479
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 )" );
2505
2481
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 )" );
2507
2483
}
2508
2484
2509
2485
2510
- static
2511
- void
2512
- loan_get_ppmt_formula ( LoanAssistantData *ldd, GString *gstr )
2486
+ static std::string
2487
+ loan_get_ppmt_formula (LoanAssistantData *ldd)
2513
2488
{
2514
2489
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 )" );
2516
2491
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 )" );
2518
2493
}
2519
2494
2520
2495
2521
- static
2522
- void
2523
- loan_get_ipmt_formula ( LoanAssistantData *ldd, GString *gstr )
2496
+ static std::string
2497
+ loan_get_ipmt_formula (LoanAssistantData *ldd)
2524
2498
{
2525
2499
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 )" );
2527
2501
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 )" );
2529
2503
}
2530
2504
2531
2505
/* ****************** Scheduled Transaction Functions ********************/
@@ -2848,7 +2822,6 @@ loan_create_sxes( LoanAssistantData *ldd )
2848
2822
int i;
2849
2823
TTInfoPtr ttxn;
2850
2824
TTSplitInfoPtr ttsi;
2851
- GString *gstr;
2852
2825
2853
2826
paymentSX = g_new0 ( toCreateSX, 1 );
2854
2827
paymentSX->name = g_strdup (ldd->ld .repMemo );
@@ -2908,14 +2881,13 @@ loan_create_sxes( LoanAssistantData *ldd )
2908
2881
{
2909
2882
Account *realSrcAcct = srcAcct;
2910
2883
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);
2913
2885
/* ttxn.splits += split( realSrcAcct, -pmt ); */
2914
2886
{
2915
2887
ttsi = std::make_shared<TTSplitInfo>();
2916
2888
ttsi->set_memo (ldd->ld .repMemo );
2917
2889
ttsi->set_account (realSrcAcct);
2918
- ttsi->set_credit_formula (gstr-> str );
2890
+ ttsi->set_credit_formula (formula. c_str () );
2919
2891
ttxn->append_template_split (ttsi);
2920
2892
ttsi = NULL ;
2921
2893
}
@@ -2924,12 +2896,10 @@ loan_create_sxes( LoanAssistantData *ldd )
2924
2896
ttsi = std::make_shared<TTSplitInfo>();
2925
2897
ttsi->set_memo (ldd->ld .repMemo );
2926
2898
ttsi->set_account (ldd->ld .escrowAcct );
2927
- ttsi->set_debit_formula (gstr-> str );
2899
+ ttsi->set_debit_formula (formula. c_str () );
2928
2900
ttxn->append_template_split (ttsi);
2929
2901
ttsi = NULL ;
2930
2902
}
2931
- g_string_free ( gstr, TRUE );
2932
- gstr = NULL ;
2933
2903
paymentSX->escrowTxn = std::make_shared<TTInfo>();
2934
2904
paymentSX->escrowTxn ->set_currency (gnc_default_currency ());
2935
2905
@@ -2946,60 +2916,48 @@ loan_create_sxes( LoanAssistantData *ldd )
2946
2916
{
2947
2917
ttsi = std::make_shared<TTSplitInfo>();
2948
2918
{
2949
- gstr = g_string_new ( ldd->ld .repMemo );
2919
+ auto gstr = g_string_new ( ldd->ld .repMemo );
2950
2920
g_string_append_printf ( gstr, " - %s" ,
2951
2921
_ (" Payment" ) );
2952
2922
ttsi->set_memo (gstr->str );
2953
2923
g_string_free ( gstr, TRUE );
2954
- gstr = NULL ;
2955
2924
}
2956
2925
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 ());
2960
2928
ttxn->append_template_split (ttsi);
2961
- g_string_free ( gstr, TRUE );
2962
- gstr = NULL ;
2963
2929
ttsi = NULL ;
2964
2930
}
2965
2931
/* ttxn.splits += split( ldd->ld.repPriAcct, +ppmt ); */
2966
2932
{
2967
2933
ttsi = std::make_shared<TTSplitInfo>();
2968
2934
{
2969
- gstr = g_string_new ( ldd->ld .repMemo );
2935
+ auto gstr = g_string_new ( ldd->ld .repMemo );
2970
2936
g_string_append_printf ( gstr, " - %s" ,
2971
2937
_ (" Principal" ) );
2972
2938
ttsi->set_memo (gstr->str );
2973
2939
g_string_free ( gstr, TRUE );
2974
- gstr = NULL ;
2975
2940
}
2976
2941
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 ());
2980
2944
ttxn->append_template_split (ttsi);
2981
- g_string_free ( gstr, TRUE );
2982
- gstr = NULL ;
2983
2945
ttsi = NULL ;
2984
2946
}
2985
2947
/* ttxn.splits += split( ldd->ld.repIntAcct, +ipmt ); */
2986
2948
{
2987
2949
ttsi = std::make_shared<TTSplitInfo>();
2988
2950
{
2989
- gstr = g_string_new ( ldd->ld .repMemo );
2951
+ auto gstr = g_string_new ( ldd->ld .repMemo );
2990
2952
g_string_append_printf ( gstr, " - %s" ,
2991
2953
_ (" Interest" ) );
2992
2954
ttsi->set_memo (gstr->str );
2993
2955
g_string_free ( gstr, TRUE );
2994
- gstr = NULL ;
2995
2956
}
2996
2957
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 ());
3000
2960
ttxn->append_template_split (ttsi);
3001
- g_string_free ( gstr, TRUE );
3002
- gstr = NULL ;
3003
2961
ttsi = NULL ;
3004
2962
}
3005
2963
}
@@ -3013,7 +2971,7 @@ loan_create_sxes( LoanAssistantData *ldd )
3013
2971
if ( rod->schedule != NULL )
3014
2972
{
3015
2973
tcSX = g_new0 ( toCreateSX, 1 );
3016
- gstr = g_string_new ( ldd->ld .repMemo );
2974
+ auto gstr = g_string_new ( ldd->ld .repMemo );
3017
2975
g_string_append_printf ( gstr, " - %s" ,
3018
2976
rod->name );
3019
2977
tcSX->name = g_strdup (gstr->str );
@@ -3037,8 +2995,6 @@ loan_create_sxes( LoanAssistantData *ldd )
3037
2995
tcSX->escrowTxn ->set_description (gstr->str );
3038
2996
3039
2997
g_string_free ( gstr, TRUE );
3040
- gstr = NULL ;
3041
-
3042
2998
repaySXes = g_list_prepend (repaySXes, tcSX);
3043
2999
3044
3000
}
0 commit comments