lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 370ad7b 2/3: Replace a shared_ptr with an obj


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 370ad7b 2/3: Replace a shared_ptr with an object; improve const correctness
Date: Sun, 4 Nov 2018 03:10:23 -0500 (EST)

branch: master
commit 370ad7ba996e824b8daad4a530c09ba576247627
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Replace a shared_ptr with an object; improve const correctness
---
 antediluvian_stubs.cpp    |  7 +++++
 basic_values.hpp          |  6 +++--
 basicvalues.cpp           |  1 +
 ihs_basicval.cpp          | 67 +++++++++++++++++++++++------------------------
 ledger_invariant_init.cpp | 11 ++++----
 product_data.cpp          |  3 ++-
 product_data.hpp          |  1 +
 7 files changed, 54 insertions(+), 42 deletions(-)

diff --git a/antediluvian_stubs.cpp b/antediluvian_stubs.cpp
index b92ea5e..eda2636 100644
--- a/antediluvian_stubs.cpp
+++ b/antediluvian_stubs.cpp
@@ -106,11 +106,18 @@ bool mec_state::is_detritus(std::string const&) const
     return false;
 }
 
+product_data::product_data()
+{}
+
 product_data::product_data(std::string const&)
 {}
 
 product_data::~product_data() = default;
 
+product_data::product_data(product_data const&)
+    :MemberSymbolTable <product_data> {}
+{}
+
 int product_data::class_version() const
 {
     return 0;
diff --git a/basic_values.hpp b/basic_values.hpp
index 3f10017..5b3f2c3 100644
--- a/basic_values.hpp
+++ b/basic_values.hpp
@@ -28,6 +28,7 @@
 #include "dbnames.hpp"                  // e_database_key
 #include "mc_enum_type_enums.hpp"
 #include "oecumenic_enumerations.hpp"
+#include "product_data.hpp"
 #include "round_to.hpp"
 #include "so_attributes.hpp"
 #include "yare_input.hpp"
@@ -59,7 +60,6 @@ class MortalityRates;
 class death_benefits;
 class modal_outlay;
 class premium_tax;
-class product_data;
 class product_database;
 class rounding_rules;
 class stratified_charges;
@@ -112,7 +112,7 @@ class LMI_SO BasicValues
     double                InvestmentManagementFee()    const;
 
     yare_input                          yare_input_;
-    std::shared_ptr<product_data>       ProductData_;
+    product_data     const              product_;
     std::shared_ptr<product_database>   Database_;
     std::shared_ptr<FundData>           FundData_;
     std::shared_ptr<rounding_rules>     RoundingRules_;
@@ -126,6 +126,8 @@ class LMI_SO BasicValues
     std::shared_ptr<Irc7702>            Irc7702_;
     std::shared_ptr<Irc7702A>           Irc7702A_;
 
+    product_data     const& product() const {return product_;}
+
     double GetAnnualTgtPrem(int a_year, double a_specamt) const;
 
     std::vector<double> const& GetCorridorFactor() const;
diff --git a/basicvalues.cpp b/basicvalues.cpp
index c664609..f7561bf 100644
--- a/basicvalues.cpp
+++ b/basicvalues.cpp
@@ -49,6 +49,7 @@ char const* GuaranteedTableFile() {return 
"/opt/lmi/data/qx_cso";}
 //============================================================================
 BasicValues::BasicValues(Input const& input)
     :yare_input_              {input}
+    ,product_                 {}
     ,StateOfJurisdiction_     {mce_s_CT}
     ,StateOfDomicile_         {mce_s_CT}
     ,PremiumTaxState_         {mce_s_CT}
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 8c217c3..48649c9 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -47,7 +47,6 @@
 #include "mortality_rates.hpp"
 #include "outlay.hpp"
 #include "premium_tax.hpp"
-#include "product_data.hpp"
 #include "rounding_rules.hpp"
 #include "stratified_charges.hpp"
 #include "value_cast.hpp"
@@ -62,6 +61,7 @@
 //============================================================================
 BasicValues::BasicValues(Input const& input)
     :yare_input_         (input)
+    ,product_            (yare_input_.ProductName)
     ,DefnLifeIns_        {mce_cvat}
     ,DefnMaterialChange_ {mce_unnecessary_premium}
     ,Equiv7702DBO3       {mce_option1_for_7702}
@@ -91,6 +91,7 @@ BasicValues::BasicValues
     // TODO ?? Need loan rate type here?
     )
     :yare_input_         (Input{})
+    ,product_            (a_ProductName)
     ,DefnLifeIns_        {mce_cvat}
     ,DefnMaterialChange_ {mce_unnecessary_premium}
     ,Equiv7702DBO3       {a_DBOptFor7702}
@@ -135,12 +136,11 @@ BasicValues::BasicValues
 //============================================================================
 void BasicValues::Init()
 {
-    ProductData_.reset(new product_data(yare_input_.ProductName));
     Database_.reset(new product_database(yare_input_));
 
     SetPermanentInvariants();
 
-    StateOfDomicile_ = 
mc_state_from_string(ProductData_->datum("InsCoDomicile"));
+    StateOfDomicile_ = mc_state_from_string(product().datum("InsCoDomicile"));
     StateOfJurisdiction_ = yare_input_.StateOfJurisdiction;
     PremiumTaxState_     = yare_input_.PremiumTaxState    ;
 
@@ -198,13 +198,13 @@ void BasicValues::Init()
             << LMI_FLUSH
             ;
         }
-    FundData_.reset(new 
FundData(AddDataDir(ProductData_->datum("FundFilename"))));
+    FundData_.reset(new FundData(AddDataDir(product().datum("FundFilename"))));
     RoundingRules_.reset
-        (new 
rounding_rules(AddDataDir(ProductData_->datum("RoundingFilename")))
+        (new rounding_rules(AddDataDir(product().datum("RoundingFilename")))
         );
     SetRoundingFunctors();
     StratifiedCharges_.reset
-        (new 
stratified_charges(AddDataDir(ProductData_->datum("TierFilename")))
+        (new stratified_charges(AddDataDir(product().datum("TierFilename")))
         );
     SpreadFor7702_.assign
         (Length
@@ -242,7 +242,6 @@ void BasicValues::Init()
 // TODO ??  Not for general use--use for GPT server only, for now. TAXATION !! 
refactor later
 void BasicValues::GPTServerInit()
 {
-    ProductData_.reset(new product_data(yare_input_.ProductName));
     Database_.reset(new product_database(yare_input_));
 
     SetPermanentInvariants();
@@ -253,7 +252,7 @@ void BasicValues::GPTServerInit()
     LMI_ASSERT(RetAge <= 100);
     LMI_ASSERT(yare_input_.RetireesCanEnroll || IssueAge <= RetAge);
 
-    StateOfDomicile_ = 
mc_state_from_string(ProductData_->datum("InsCoDomicile"));
+    StateOfDomicile_ = mc_state_from_string(product().datum("InsCoDomicile"));
     StateOfJurisdiction_ = yare_input_.StateOfJurisdiction;
     PremiumTaxState_     = yare_input_.PremiumTaxState    ;
 
@@ -290,14 +289,14 @@ void BasicValues::GPTServerInit()
             );
         }
 //  FundData_       = new FundData
-//      (AddDataDir(ProductData_->datum("FundFilename"))
+//      (AddDataDir(product().datum("FundFilename"))
 //      );
     RoundingRules_.reset
-        (new 
rounding_rules(AddDataDir(ProductData_->datum("RoundingFilename")))
+        (new rounding_rules(AddDataDir(product().datum("RoundingFilename")))
         );
     SetRoundingFunctors();
     StratifiedCharges_.reset
-        (new 
stratified_charges(AddDataDir(ProductData_->datum("TierFilename")))
+        (new stratified_charges(AddDataDir(product().datum("TierFilename")))
         );
     SpreadFor7702_.assign
         (Length
@@ -597,7 +596,7 @@ double BasicValues::GetAnnualTgtPrem(int a_year, double 
a_specamt) const
 /// Establish up front some values that cannot later change.
 ///
 /// Values set here depend on Database_, and thus on yare_input_ and
-/// on ProductData_, but not on any other shared_ptr members--so they
+/// on product_, but not on any other shared_ptr members--so they
 /// can reliably be used in initializing those other members.
 
 void BasicValues::SetPermanentInvariants()
@@ -1860,7 +1859,7 @@ std::vector<double> const& BasicValues::GetMlyDcvqc() 
const
 std::vector<double> BasicValues::GetCvatCorridorFactors() const
 {
     return GetTable
-        (ProductData_->datum("CvatCorridorFilename")
+        (product().datum("CvatCorridorFilename")
         ,DB_CorridorTable
         );
 }
@@ -1868,7 +1867,7 @@ std::vector<double> BasicValues::GetCvatCorridorFactors() 
const
 std::vector<double> BasicValues::GetIrc7702NspRates() const
 {
     return GetTable
-        (ProductData_->datum("Irc7702NspFilename")
+        (product().datum("Irc7702NspFilename")
         ,DB_CorridorTable
         );
 }
@@ -1878,7 +1877,7 @@ std::vector<double> BasicValues::GetIrc7702NspRates() 
const
 std::vector<double> BasicValues::GetCurrCOIRates0() const
 {
     return GetTable
-        (ProductData_->datum("CurrCOIFilename")
+        (product().datum("CurrCOIFilename")
         ,DB_CurrCoiTable
         ,true
         ,CanBlend
@@ -1889,7 +1888,7 @@ std::vector<double> BasicValues::GetCurrCOIRates0() const
 std::vector<double> BasicValues::GetCurrCOIRates1() const
 {
     return GetTable
-        (ProductData_->datum("CurrCOIFilename")
+        (product().datum("CurrCOIFilename")
         ,DB_CurrCoiTable1
         ,CurrCoiTable0Limit < std::numeric_limits<double>::max()
         ,CanBlend
@@ -1900,7 +1899,7 @@ std::vector<double> BasicValues::GetCurrCOIRates1() const
 std::vector<double> BasicValues::GetCurrCOIRates2() const
 {
     return GetTable
-        (ProductData_->datum("CurrCOIFilename")
+        (product().datum("CurrCOIFilename")
         ,DB_CurrCoiTable2
         ,CurrCoiTable1Limit < std::numeric_limits<double>::max()
         ,CanBlend
@@ -1911,7 +1910,7 @@ std::vector<double> BasicValues::GetCurrCOIRates2() const
 std::vector<double> BasicValues::GetGuarCOIRates() const
 {
     return GetTable
-        (ProductData_->datum("GuarCOIFilename")
+        (product().datum("GuarCOIFilename")
         ,DB_GuarCoiTable
         );
 }
@@ -1919,7 +1918,7 @@ std::vector<double> BasicValues::GetGuarCOIRates() const
 std::vector<double> BasicValues::GetSmokerBlendedGuarCOIRates() const
 {
     return GetTable
-        (ProductData_->datum("GuarCOIFilename")
+        (product().datum("GuarCOIFilename")
         ,DB_GuarCoiTable
         ,true
         ,CanBlend
@@ -1930,7 +1929,7 @@ std::vector<double> 
BasicValues::GetSmokerBlendedGuarCOIRates() const
 std::vector<double> BasicValues::GetWpRates() const
 {
     return GetTable
-        (ProductData_->datum("WPFilename")
+        (product().datum("WPFilename")
         ,DB_WpTable
         ,Database_->Query(DB_AllowWp)
         );
@@ -1939,7 +1938,7 @@ std::vector<double> BasicValues::GetWpRates() const
 std::vector<double> BasicValues::GetAdbRates() const
 {
     return GetTable
-        (ProductData_->datum("ADDFilename")
+        (product().datum("ADDFilename")
         ,DB_AdbTable
         ,Database_->Query(DB_AllowAdb)
         );
@@ -1948,7 +1947,7 @@ std::vector<double> BasicValues::GetAdbRates() const
 std::vector<double> BasicValues::GetChildRiderRates() const
 {
     return GetTable
-        (ProductData_->datum("ChildRiderFilename")
+        (product().datum("ChildRiderFilename")
         ,DB_ChildRiderTable
         ,Database_->Query(DB_AllowChildRider)
         );
@@ -1962,7 +1961,7 @@ std::vector<double> 
BasicValues::GetCurrentSpouseRiderRates() const
         }
 
     std::vector<double> z = actuarial_table_rates
-        (AddDataDir(ProductData_->datum("CurrSpouseRiderFilename"))
+        (AddDataDir(product().datum("CurrSpouseRiderFilename"))
         ,bourn_cast<int>(Database_->Query(DB_SpouseRiderTable))
         ,yare_input_.SpouseIssueAge
         ,EndtAge - yare_input_.SpouseIssueAge
@@ -1979,7 +1978,7 @@ std::vector<double> 
BasicValues::GetGuaranteedSpouseRiderRates() const
         }
 
     std::vector<double> z = actuarial_table_rates
-        (AddDataDir(ProductData_->datum("GuarSpouseRiderFilename"))
+        (AddDataDir(product().datum("GuarSpouseRiderFilename"))
         ,bourn_cast<int>(Database_->Query(DB_SpouseRiderGuarTable))
         ,yare_input_.SpouseIssueAge
         ,EndtAge - yare_input_.SpouseIssueAge
@@ -1991,7 +1990,7 @@ std::vector<double> 
BasicValues::GetGuaranteedSpouseRiderRates() const
 std::vector<double> BasicValues::GetCurrentTermRates() const
 {
     return GetTable
-        (ProductData_->datum("CurrTermFilename")
+        (product().datum("CurrTermFilename")
         ,DB_TermTable
         ,Database_->Query(DB_AllowTerm)
         ,CanBlend
@@ -2002,7 +2001,7 @@ std::vector<double> BasicValues::GetCurrentTermRates() 
const
 std::vector<double> BasicValues::GetGuaranteedTermRates() const
 {
     return GetTable
-        (ProductData_->datum("GuarTermFilename")
+        (product().datum("GuarTermFilename")
         ,DB_GuarTermTable
         ,Database_->Query(DB_AllowTerm)
         ,CanBlend
@@ -2013,7 +2012,7 @@ std::vector<double> BasicValues::GetGuaranteedTermRates() 
const
 std::vector<double> BasicValues::GetGroupProxyRates() const
 {
     return GetTable
-        (ProductData_->datum("GroupProxyFilename")
+        (product().datum("GroupProxyFilename")
         ,DB_GroupProxyRateTable
         );
 }
@@ -2021,7 +2020,7 @@ std::vector<double> BasicValues::GetGroupProxyRates() 
const
 std::vector<double> BasicValues::GetSevenPayRates() const
 {
     return GetTable
-        (ProductData_->datum("SevenPayFilename")
+        (product().datum("SevenPayFilename")
         ,DB_SevenPayTable
     // TAXATION !! No table available if 7PP calculated from first principles.
 //        ,1 == Database_->Query(DB_SevenPayWhence)
@@ -2031,7 +2030,7 @@ std::vector<double> BasicValues::GetSevenPayRates() const
 std::vector<double> BasicValues::GetTgtPremRates() const
 {
     return GetTable
-        (ProductData_->datum("TgtPremFilename")
+        (product().datum("TgtPremFilename")
         ,DB_TgtPremTable
 // Use this line instead:
 //      ,oe_modal_table == TgtPremType
@@ -2051,7 +2050,7 @@ std::vector<double> BasicValues::GetTgtPremRates() const
 std::vector<double> BasicValues::GetIrc7702QRates() const
 {
     return GetTable
-        (ProductData_->datum("Irc7702QFilename")
+        (product().datum("Irc7702QFilename")
         ,DB_Irc7702QTable
         );
 }
@@ -2059,7 +2058,7 @@ std::vector<double> BasicValues::GetIrc7702QRates() const
 std::vector<double> BasicValues::GetPartialMortalityRates() const
 {
     return GetTable
-        (ProductData_->datum("PartialMortalityFilename")
+        (product().datum("PartialMortalityFilename")
         ,DB_PartialMortTable
         ,true
         ,CannotBlend
@@ -2075,7 +2074,7 @@ std::vector<double> BasicValues::GetSubstdTblMultTable() 
const
         }
 
     return GetTable
-        (ProductData_->datum("SubstdTblMultFilename")
+        (product().datum("SubstdTblMultFilename")
         ,DB_SubstdTableMultTable
         );
 }
@@ -2083,7 +2082,7 @@ std::vector<double> BasicValues::GetSubstdTblMultTable() 
const
 std::vector<double> BasicValues::GetCurrSpecAmtLoadTable() const
 {
     return GetTable
-        (ProductData_->datum("CurrSpecAmtLoadFilename")
+        (product().datum("CurrSpecAmtLoadFilename")
         ,DB_CurrSpecAmtLoadTable
         ,0 != Database_->Query(DB_CurrSpecAmtLoadTable)
         );
@@ -2092,7 +2091,7 @@ std::vector<double> 
BasicValues::GetCurrSpecAmtLoadTable() const
 std::vector<double> BasicValues::GetGuarSpecAmtLoadTable() const
 {
     return GetTable
-        (ProductData_->datum("GuarSpecAmtLoadFilename")
+        (product().datum("GuarSpecAmtLoadFilename")
         ,DB_GuarSpecAmtLoadTable
         ,0 != Database_->Query(DB_GuarSpecAmtLoadTable)
         );
diff --git a/ledger_invariant_init.cpp b/ledger_invariant_init.cpp
index d20ba6a..9bc964b 100644
--- a/ledger_invariant_init.cpp
+++ b/ledger_invariant_init.cpp
@@ -32,6 +32,7 @@
 #include "death_benefits.hpp"
 #include "fund_data.hpp"
 #include "interest_rates.hpp"
+#include "lmi.hpp"                      // is_antediluvian_fork()
 #include "loads.hpp"
 #include "mc_enum_types_aux.hpp"        // mc_str()
 #include "miscellany.hpp"               // each_equal()
@@ -145,9 +146,9 @@ void LedgerInvariant::Init(BasicValues const* b)
     FundAllocs            .resize(0);
     FundAllocations       .resize(0);
 
-    // The antediluvian branch has a null FundData_ object.
+    // The antediluvian branch doesn't meaningfully initialize class FundData.
     int number_of_funds(0);
-    if(b->FundData_)
+    if(!is_antediluvian_fork())
         {
         number_of_funds = b->FundData_->GetNumberOfFunds();
         }
@@ -271,10 +272,10 @@ void LedgerInvariant::Init(BasicValues const* b)
     std::string dbo_name_rop     = mc_str(mce_rop    );
     std::string dbo_name_mdb     = mc_str(mce_mdb    );
 
-    // The antediluvian branch has a null ProductData_ object.
-    if(b->ProductData_)
+    // The antediluvian branch doesn't meaningfully initialize class 
product_data.
+    if(!is_antediluvian_fork())
         {
-        product_data const& p = *b->ProductData_;
+        product_data const& p = b->product();
         // Accommodate one alternative policy-form name.
         // DATABASE !! It would be much better, of course, to let all
         // strings in class product_data vary across the same axes as
diff --git a/product_data.cpp b/product_data.cpp
index 84a0c83..69d28c3 100644
--- a/product_data.cpp
+++ b/product_data.cpp
@@ -118,7 +118,8 @@ std::string const& glossed_string::gloss() const
 
 /// Private default ctor.
 ///
-/// Used only by friend class PolicyDocument and 'my_prod.cpp'.
+/// Used only by friends: class PolicyDocument, 'my_prod.cpp',
+/// and 'basicvalues.cpp'.
 
 product_data::product_data()
 {
diff --git a/product_data.hpp b/product_data.hpp
index be85c66..6b595c6 100644
--- a/product_data.hpp
+++ b/product_data.hpp
@@ -80,6 +80,7 @@ class LMI_SO product_data final
     :public xml_serializable  <product_data>
     ,public MemberSymbolTable <product_data>
 {
+    friend class BasicValues; // For antediluvian fork only.
     friend class PolicyDocument;
     friend class product_file_test;
 



reply via email to

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