[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 9fffc84 4/4: Deduplicate code providing selec
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 9fffc84 4/4: Deduplicate code providing selected tables |
Date: |
Sat, 8 Jun 2019 12:15:26 -0400 (EDT) |
branch: master
commit 9fffc84bd8a6209f6a8136ff555b9a8429a47604
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Deduplicate code providing selected tables
See the immediately preceding commit.
Reimplemented several member functions of class BasicValues in terms
of the free functions just added to the basic_tables TU. Eliminating
these members is not quite trivial due to the interplay between classes
BasicValues and MortalityRates.
---
gpt_server.cpp | 45 ++++++++++++++++++++-------------------------
ihs_basicval.cpp | 27 ++++++++++++++++-----------
mec_server.cpp | 45 ++++++++++++++++++++-------------------------
3 files changed, 56 insertions(+), 61 deletions(-)
diff --git a/gpt_server.cpp b/gpt_server.cpp
index 87185f1..172bdc0 100644
--- a/gpt_server.cpp
+++ b/gpt_server.cpp
@@ -23,9 +23,9 @@
#include "gpt_server.hpp"
-#include "actuarial_table.hpp"
#include "alert.hpp"
#include "assert_lmi.hpp"
+#include "basic_tables.hpp"
#include "commutation_functions.hpp"
#include "configurable_settings.hpp"
#include "contains.hpp"
@@ -140,29 +140,23 @@ gpt_state test_one_days_gpt_transactions
round_to<double> const RoundNonMecPrem(2, r_downward);
round_to<double> const round_max_premium(2, r_downward);
- auto const target_premium_type =
database.query<oenum_modal_prem_type>(DB_TgtPremType);
- std::vector<double> TargetPremiumRates(input.years_to_maturity());
- if(oe_modal_table == target_premium_type)
- {
- TargetPremiumRates = actuarial_table_rates
- (AddDataDir(product_filenames.datum("TgtPremFilename"))
- ,database.query<int>(DB_TgtPremTable)
- ,input.issue_age()
- ,input.years_to_maturity()
- );
- }
- else
- {
- ; // Do nothing: 'TargetPremiumRates' won't be used.
- }
+ std::vector<double> TargetPremiumRates = target_premium_rates
+ (product_filenames
+ ,database
+ ,input.issue_age()
+ ,input.years_to_maturity()
+ );
- std::vector<double> const CvatCorridorFactors = actuarial_table_rates
- (AddDataDir(product_filenames.datum("CvatCorridorFilename"))
- ,database.query<int>(DB_CorridorTable)
+ std::vector<double> const CvatCorridorFactors = cvat_corridor_factors
+ (product_filenames
+ ,database
,input.issue_age()
,input.years_to_maturity()
);
+ // These are the Ax and 7Px actually used in production, which
+ // aren't necessarily looked up in external tables.
+
std::vector<double> tabular_Ax;
for(int j = 0; j < input.years_to_maturity(); ++j)
{
@@ -171,16 +165,16 @@ gpt_state test_one_days_gpt_transactions
}
tabular_Ax.push_back(1.0);
- std::vector<double> const tabular_7Px = actuarial_table_rates
- (AddDataDir(product_filenames.datum("SevenPayFilename"))
- ,database.query<int>(DB_SevenPayTable)
+ std::vector<double> const tabular_7Px = irc_7702A_7pp
+ (product_filenames
+ ,database
,input.issue_age()
,input.years_to_maturity()
);
- std::vector<double> Mly7702qc = actuarial_table_rates
- (AddDataDir(product_filenames.datum("Irc7702QFilename"))
- ,database.query<int>(DB_Irc7702QTable)
+ std::vector<double> Mly7702qc = irc_7702_q
+ (product_filenames
+ ,database
,input.issue_age()
,input.years_to_maturity()
);
@@ -277,6 +271,7 @@ gpt_state test_one_days_gpt_transactions
? 0
: input.inforce_year()
;
+ auto const target_premium_type =
database.query<oenum_modal_prem_type>(DB_TgtPremType);
if(oe_monthly_deduction == target_premium_type)
{
warning() << "Unsupported modal premium type." << LMI_FLUSH;
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index f98286f..087b0f6 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -25,6 +25,7 @@
#include "alert.hpp"
#include "assert_lmi.hpp"
+#include "basic_tables.hpp"
#include "bourn_cast.hpp"
#include "calendar_date.hpp"
#include "contains.hpp"
@@ -1858,9 +1859,11 @@ std::vector<double> const& BasicValues::GetMlyDcvqc()
const
std::vector<double> BasicValues::GetCvatCorridorFactors() const
{
- return GetTable
- (product().datum("CvatCorridorFilename")
- ,DB_CorridorTable
+ return cvat_corridor_factors
+ (product()
+ ,database()
+ ,GetIssueAge()
+ ,GetLength()
);
}
@@ -2011,11 +2014,11 @@ std::vector<double> BasicValues::GetGroupProxyRates()
const
std::vector<double> BasicValues::GetSevenPayRates() const
{
- return GetTable
- (product().datum("SevenPayFilename")
- ,DB_SevenPayTable
- // TAXATION !! No table available if 7PP calculated from first principles.
-// ,oe_7702_prem_from_table == database().query<bool>(DB_SevenPayWhence)
+ return irc_7702A_7pp
+ (product()
+ ,database()
+ ,GetIssueAge()
+ ,GetLength()
);
}
@@ -2041,9 +2044,11 @@ std::vector<double> BasicValues::GetTgtPremRates() const
std::vector<double> BasicValues::GetIrc7702QRates() const
{
- return GetTable
- (product().datum("Irc7702QFilename")
- ,DB_Irc7702QTable
+ return irc_7702_q
+ (product()
+ ,database()
+ ,GetIssueAge()
+ ,GetLength()
);
}
diff --git a/mec_server.cpp b/mec_server.cpp
index 0b5fd08..994d8eb 100644
--- a/mec_server.cpp
+++ b/mec_server.cpp
@@ -23,9 +23,9 @@
#include "mec_server.hpp"
-#include "actuarial_table.hpp"
#include "alert.hpp"
#include "assert_lmi.hpp"
+#include "basic_tables.hpp"
#include "commutation_functions.hpp"
#include "configurable_settings.hpp"
#include "contains.hpp"
@@ -123,29 +123,23 @@ mec_state test_one_days_7702A_transactions
round_to<double> const RoundNonMecPrem(2, r_downward);
round_to<double> const round_max_premium(2, r_downward);
- auto const target_premium_type =
database.query<oenum_modal_prem_type>(DB_TgtPremType);
- std::vector<double> TargetPremiumRates(input.years_to_maturity());
- if(oe_modal_table == target_premium_type)
- {
- TargetPremiumRates = actuarial_table_rates
- (AddDataDir(product_filenames.datum("TgtPremFilename"))
- ,database.query<int>(DB_TgtPremTable)
- ,input.issue_age()
- ,input.years_to_maturity()
- );
- }
- else
- {
- ; // Do nothing: 'TargetPremiumRates' won't be used.
- }
+ std::vector<double> TargetPremiumRates = target_premium_rates
+ (product_filenames
+ ,database
+ ,input.issue_age()
+ ,input.years_to_maturity()
+ );
- std::vector<double> const CvatCorridorFactors = actuarial_table_rates
- (AddDataDir(product_filenames.datum("CvatCorridorFilename"))
- ,database.query<int>(DB_CorridorTable)
+ std::vector<double> const CvatCorridorFactors = cvat_corridor_factors
+ (product_filenames
+ ,database
,input.issue_age()
,input.years_to_maturity()
);
+ // These are the Ax and 7Px actually used in production, which
+ // aren't necessarily looked up in external tables.
+
std::vector<double> tabular_Ax;
for(int j = 0; j < input.years_to_maturity(); ++j)
{
@@ -154,16 +148,16 @@ mec_state test_one_days_7702A_transactions
}
tabular_Ax.push_back(1.0);
- std::vector<double> const tabular_7Px = actuarial_table_rates
- (AddDataDir(product_filenames.datum("SevenPayFilename"))
- ,database.query<int>(DB_SevenPayTable)
+ std::vector<double> const tabular_7Px = irc_7702A_7pp
+ (product_filenames
+ ,database
,input.issue_age()
,input.years_to_maturity()
);
- std::vector<double> Mly7702qc = actuarial_table_rates
- (AddDataDir(product_filenames.datum("Irc7702QFilename"))
- ,database.query<int>(DB_Irc7702QTable)
+ std::vector<double> Mly7702qc = irc_7702_q
+ (product_filenames
+ ,database
,input.issue_age()
,input.years_to_maturity()
);
@@ -260,6 +254,7 @@ mec_state test_one_days_7702A_transactions
? 0
: input.inforce_year()
;
+ auto const target_premium_type =
database.query<oenum_modal_prem_type>(DB_TgtPremType);
if(oe_monthly_deduction == target_premium_type)
{
warning() << "Unsupported modal premium type." << LMI_FLUSH;