lmi-commits
[Top][All Lists]
Advanced

[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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]