lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master 6730bd6 2/3: Add member irr_initialized_ to k


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 6730bd6 2/3: Add member irr_initialized_ to keep track of state
Date: Fri, 16 Feb 2018 17:39:03 -0500 (EST)

branch: master
commit 6730bd6dd2c986297f7cbee10471e9006c985bc3
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Add member irr_initialized_ to keep track of state
    
    The calculation summary invokes CalculateIrrs() only when necessary,
    because IRR calculations affect responsiveness. The technique it uses
    to infer whether IRR calculations have already been run is extravagant
    and imperfect. This newly-added member offers an alternative that is
    simple, direct, and easier to perfect.
---
 ledger_invariant.cpp | 13 +++++++++++++
 ledger_invariant.hpp | 11 +++++++++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/ledger_invariant.cpp b/ledger_invariant.cpp
index d8c75cb..6ea6c0b 100644
--- a/ledger_invariant.cpp
+++ b/ledger_invariant.cpp
@@ -51,6 +51,7 @@
 //============================================================================
 LedgerInvariant::LedgerInvariant(int len)
     :LedgerBase(len)
+    ,irr_initialized_(false)
     ,FullyInitialized(false)
 {
     Alloc(len);
@@ -59,6 +60,7 @@ LedgerInvariant::LedgerInvariant(int len)
 //============================================================================
 LedgerInvariant::LedgerInvariant(LedgerInvariant const& obj)
     :LedgerBase(obj)
+    ,irr_initialized_(false)
     ,FullyInitialized(false)
 {
     Alloc(obj.GetLength());
@@ -411,12 +413,14 @@ void LedgerInvariant::Copy(LedgerInvariant const& obj)
 
     // Private internals.
     irr_precision_         = obj.irr_precision_        ;
+    irr_initialized_       = false; // IRR vectors are not copied.
     FullyInitialized       = obj.FullyInitialized      ;
 }
 
 //============================================================================
 void LedgerInvariant::Destroy()
 {
+    irr_initialized_ = false;
     FullyInitialized = false;
 }
 
@@ -446,6 +450,7 @@ void LedgerInvariant::Init()
     SupplementalReport  = false;
 
     irr_precision_      = 0;
+    irr_initialized_    = false;
     FullyInitialized    = false;
 }
 
@@ -936,6 +941,8 @@ if(1 != b->yare_input_.InforceDataSource)
     SupplementalReportColumn10 = 
mc_str(b->yare_input_.SupplementalReportColumn10);
     SupplementalReportColumn11 = 
mc_str(b->yare_input_.SupplementalReportColumn11);
 
+    // irr_initialized_ is deliberately not set here: it's not
+    // encompassed by 'FullyInitialized'.
     FullyInitialized = true;
 }
 
@@ -1260,6 +1267,8 @@ LedgerInvariant& LedgerInvariant::PlusEq(LedgerInvariant 
const& a_Addend)
 
 void LedgerInvariant::CalculateIrrs(Ledger const& LedgerValues)
 {
+    irr_initialized_ = false;
+
     int max_length = LedgerValues.GetMaxLength();
 
     LedgerVariant const& Curr_ = LedgerValues.GetCurrFull();
@@ -1316,6 +1325,8 @@ void LedgerInvariant::CalculateIrrs(Ledger const& 
LedgerValues)
             )
         )
         {
+        // PDF !! Initialize the '0'-suffixed IRRs here.
+        irr_initialized_ = true;
         return;
         }
 
@@ -1357,6 +1368,8 @@ void LedgerInvariant::CalculateIrrs(Ledger const& 
LedgerValues)
         ,max_length
         ,irr_precision_
         );
+
+    irr_initialized_ = true;
 }
 
 //============================================================================
diff --git a/ledger_invariant.hpp b/ledger_invariant.hpp
index c2f4d38..628a5d0 100644
--- a/ledger_invariant.hpp
+++ b/ledger_invariant.hpp
@@ -53,8 +53,9 @@ class LMI_SO LedgerInvariant
 
     LedgerInvariant& PlusEq(LedgerInvariant const& a_Addend);
 
+    bool                         is_irr_initialized()    const;
     bool                         IsFullyInitialized()    const;
-    int                  GetLength()             const override;
+    int                          GetLength()             const override;
     std::vector<double> const&   GetInforceLives()       const;
     double                       GetInitAnnLoanDueRate() const;
     std::string const&           GetStatePostalAbbrev()  const;
@@ -414,9 +415,15 @@ class LMI_SO LedgerInvariant
     // Special cases.
     int             Length;
     int             irr_precision_;
-    bool            FullyInitialized;   // I.e. by Init(BasicValues const* b).
+    bool            irr_initialized_;  // CalculateIrrs() succeeded
+    bool            FullyInitialized;  // Init(BasicValues const*) succeeded
 };
 
+inline bool LedgerInvariant::is_irr_initialized() const
+{
+    return irr_initialized_;
+}
+
 inline bool LedgerInvariant::IsFullyInitialized() const
 {
     return FullyInitialized;



reply via email to

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