[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 809d1c4 2/8: Add flags to enable or disable i
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 809d1c4 2/8: Add flags to enable or disable i7702 account-paths |
Date: |
Sun, 14 Mar 2021 16:03:30 -0400 (EDT) |
branch: master
commit 809d1c49c9a12dc7cc87f1b576d86b0698ebf3dd
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Add flags to enable or disable i7702 account-paths
---
i7702.cpp | 83 +++++++++++++++++++++++++++++++++++++++------------------------
i7702.hpp | 20 ++++++++++++---
2 files changed, 67 insertions(+), 36 deletions(-)
diff --git a/i7702.cpp b/i7702.cpp
index 58d8678..bbc0e7e 100644
--- a/i7702.cpp
+++ b/i7702.cpp
@@ -189,23 +189,31 @@ i7702::i7702
,std::vector<double> const& Dflr
,std::vector<double> const& Dvlr
,std::vector<double> const& Em
+ ,std::vector<double> const& use_gen
+ ,std::vector<double> const& use_sep
+ ,std::vector<double> const& use_flr
+ ,std::vector<double> const& use_vlr
)
- :length_ {length}
- ,A0_ {A0 }
- ,A1_ {A1 }
- ,Bgen_ {Bgen }
- ,Bsep_ {Bsep }
- ,Bflr_ {Bflr }
- ,Bvlr_ {Bvlr }
- ,Cgen_ {Cgen }
- ,Csep_ {Csep }
- ,Cflr_ {Cflr }
- ,Cvlr_ {Cvlr }
- ,Dgen_ {Dgen }
- ,Dsep_ {Dsep }
- ,Dflr_ {Dflr }
- ,Dvlr_ {Dvlr }
- ,Em_ {Em }
+ :length_ {length }
+ ,A0_ {A0 }
+ ,A1_ {A1 }
+ ,Bgen_ {Bgen }
+ ,Bsep_ {Bsep }
+ ,Bflr_ {Bflr }
+ ,Bvlr_ {Bvlr }
+ ,Cgen_ {Cgen }
+ ,Csep_ {Csep }
+ ,Cflr_ {Cflr }
+ ,Cvlr_ {Cvlr }
+ ,Dgen_ {Dgen }
+ ,Dsep_ {Dsep }
+ ,Dflr_ {Dflr }
+ ,Dvlr_ {Dvlr }
+ ,Em_ {Em }
+ ,use_gen_ {use_gen}
+ ,use_sep_ {use_sep}
+ ,use_flr_ {use_flr}
+ ,use_vlr_ {use_vlr}
,ic_usual_ (length_)
,ic_glp_ (length_)
,ic_gsp_ (length_)
@@ -213,19 +221,23 @@ i7702::i7702
,ig_glp_ (length_)
,ig_gsp_ (length_)
{
- LMI_ASSERT(length_ == lmi::ssize(Bgen_));
- LMI_ASSERT(length_ == lmi::ssize(Bsep_));
- LMI_ASSERT(length_ == lmi::ssize(Bflr_));
- LMI_ASSERT(length_ == lmi::ssize(Bvlr_));
- LMI_ASSERT(length_ == lmi::ssize(Cgen_));
- LMI_ASSERT(length_ == lmi::ssize(Csep_));
- LMI_ASSERT(length_ == lmi::ssize(Cflr_));
- LMI_ASSERT(length_ == lmi::ssize(Cvlr_));
- LMI_ASSERT(length_ == lmi::ssize(Dgen_));
- LMI_ASSERT(length_ == lmi::ssize(Dsep_));
- LMI_ASSERT(length_ == lmi::ssize(Dflr_));
- LMI_ASSERT(length_ == lmi::ssize(Dvlr_));
- LMI_ASSERT(length_ == lmi::ssize(Em_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Bgen_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Bsep_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Bflr_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Bvlr_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Cgen_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Csep_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Cflr_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Cvlr_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Dgen_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Dsep_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Dflr_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Dvlr_ ));
+ LMI_ASSERT(length_ == lmi::ssize(Em_ ));
+ LMI_ASSERT(length_ == lmi::ssize(use_gen_));
+ LMI_ASSERT(length_ == lmi::ssize(use_sep_));
+ LMI_ASSERT(length_ == lmi::ssize(use_flr_));
+ LMI_ASSERT(length_ == lmi::ssize(use_vlr_));
initialize();
}
@@ -250,6 +262,10 @@ i7702::i7702
,Dflr_ (length_)
,Dvlr_ (length_)
,Em_ (length_)
+ ,use_gen_ (length_)
+ ,use_sep_ (length_)
+ ,use_flr_ (length_)
+ ,use_vlr_ (length_)
,ic_usual_ (length_)
,ic_glp_ (length_)
,ic_gsp_ (length_)
@@ -262,6 +278,11 @@ i7702::i7702
,net_glp_ (length_)
,net_gsp_ (length_)
{
+ database.query_into(DB_AllowGenAcct , use_gen_);
+ database.query_into(DB_AllowSepAcct , use_sep_);
+ database.query_into(DB_AllowFixedLoan, use_flr_);
+ database.query_into(DB_AllowVlr , use_vlr_);
+
// Monthly guar net int for 7702 is
// greater of {iglp(), igsp()} and annual guar int rate
// less AV load
@@ -280,9 +301,7 @@ i7702::i7702
// (fixed rate charged on loans) - (guaranteed loan spread)
if(!database.query<bool>(DB_IgnoreLoanRateFor7702))
{
- std::vector<double> allow_fixed_loan;
- database.query_into(DB_AllowFixedLoan, allow_fixed_loan);
- if(!each_equal(allow_fixed_loan, false))
+ if(!each_equal(use_flr_, false))
{
std::vector<double> gross_loan_rate;
database.query_into(DB_FixedLoanRate , gross_loan_rate);
diff --git a/i7702.hpp b/i7702.hpp
index 43b0557..05e6406 100644
--- a/i7702.hpp
+++ b/i7702.hpp
@@ -76,16 +76,19 @@ class LMI_SO i7702 final
,std::vector<double> const& Dflr
,std::vector<double> const& Dvlr
,std::vector<double> const& Em
+ ,std::vector<double> const& use_gen
+ ,std::vector<double> const& use_sep
+ ,std::vector<double> const& use_flr
+ ,std::vector<double> const& use_vlr
);
void initialize();
int const length_;
- // Parameters from product database--member names are
- // capitalized to match formulas in documentation, but
- // suffixed to mark them as members. All are annual rates
- // except 'Em_', which is monthly.
+ // Rates from product database--member names are capitalized to
+ // match formulas in documentation, but suffixed to mark them as
+ // members. All are annual rates except 'Em_', which is monthly.
double A0_ ;
double A1_ ;
std::vector<double> Bgen_ ;
@@ -102,6 +105,15 @@ class LMI_SO i7702 final
std::vector<double> Dvlr_ ;
std::vector<double> Em_ ;
+ // Booleans from product database--stored as doubles because
+ // std::vector<bool> is not a container. They are vectors
+ // rather than scalars to allow durational enablement--e.g.,
+ // variable-rate loans might be forbidden in the issue year.
+ std::vector<double> use_gen_;
+ std::vector<double> use_sep_;
+ std::vector<double> use_flr_;
+ std::vector<double> use_vlr_;
+
// Derived 7702 interest rates--all monthly.
std::vector<double> ic_usual_;
std::vector<double> ic_glp_ ;
- [lmi-commits] [lmi] master updated (24e01a1 -> cd890b4), Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master 21d8366 4/8: Assign and use A1_, Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master 12df365 6/8: Mark some shortcomings to be remediated soon, Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master 258a675 1/8: Add and use a "length" data member, Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master 809d1c4 2/8: Add flags to enable or disable i7702 account-paths,
Greg Chicares <=
- [lmi-commits] [lmi] master 6dd530d 3/8: Conditionally override use of loan rates for 7702 interest, Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master cd890b4 8/8: Mark old implementation for expunction, Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master d59b96b 5/8: Reimplement 7702 interest-rate determination, Greg Chicares, 2021/03/14
- [lmi-commits] [lmi] master cc9b752 7/8: Remove redundant comments, Greg Chicares, 2021/03/14