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