pcb_calculator/eserie.*: fix some coding style issues.

No actual code change (I hope...)
This commit is contained in:
jean-pierre charras 2021-10-04 13:05:51 +02:00
parent 21d3662ed3
commit 78ddb1408f
2 changed files with 55 additions and 53 deletions

View File

@ -22,9 +22,16 @@
#include <array> #include <array>
#include <string_utils.h> #include <string_utils.h>
#include "class_regulator_data.h"
#include "pcb_calculator_frame.h" #include "pcb_calculator_frame.h"
extern double DoubleFromString( const wxString& TextValue );
/* If BENCHMARK is defined, any 4R E12 calculations will print its execution time to console
* My Hasswell Enthusiast reports 225 mSec what are reproducible within plusminus 2 percent
*/
//#define BENCHMARK
#ifdef BENCHMARK #ifdef BENCHMARK
#include <sys/time.h> #include <sys/time.h>
#endif #endif
@ -35,14 +42,14 @@
wxString eseries_help = wxString eseries_help =
#include "eserie_help.h" #include "eserie_help.h"
eserie r; E_SERIE r;
void eserie::Exclude( double aValue ) void E_SERIE::Exclude( double aValue )
{ {
if( aValue ) // if there is a value to exclude other than a wire jumper if( aValue ) // if there is a value to exclude other than a wire jumper
{ {
for( r_data& i : luts[m_series] ) // then search it in the selected E-Serie lookup table for( R_DATA& i : m_luts[m_series] ) // then search it in the selected E-Serie lookup table
{ {
if( i.e_value == aValue ) // if value to exclude found if( i.e_value == aValue ) // if value to exclude found
i.e_use = false; // disable its use i.e_use = false; // disable its use
@ -51,7 +58,7 @@ void eserie::Exclude( double aValue )
} }
void eserie::simple_solution( uint32_t aSize ) void E_SERIE::simple_solution( uint32_t aSize )
{ {
uint32_t i; uint32_t i;
@ -69,7 +76,7 @@ void eserie::simple_solution( uint32_t aSize )
} }
void eserie::combine4( uint32_t aSize ) void E_SERIE::combine4( uint32_t aSize )
{ {
uint32_t i,j; uint32_t i,j;
double tmp; double tmp;
@ -126,29 +133,29 @@ void eserie::combine4( uint32_t aSize )
} }
void eserie::NewCalc( void ) void E_SERIE::NewCalc( void )
{ {
for( r_data& i : m_cmb_lut ) for( R_DATA& i : m_cmb_lut )
i.e_use = false; // before any calculation is done, assume that i.e_use = false; // before any calculation is done, assume that
for( r_data& i : m_results ) for( R_DATA& i : m_results )
i.e_use = false; // no combinations and no results are available i.e_use = false; // no combinations and no results are available
for( r_data& i : luts[m_series]) for( R_DATA& i : m_luts[m_series])
i.e_use = true; // all selected E-values available i.e_use = true; // all selected E-values available
} }
uint32_t eserie::combine2( void ) uint32_t E_SERIE::combine2( void )
{ {
uint32_t combi2R = 0; // target index counts calculated 2R combinations uint32_t combi2R = 0; // target index counts calculated 2R combinations
std::string s; std::string s;
for( const r_data& i : luts[m_series] ) // outer loop to sweep selected source lookup table for( const R_DATA& i : m_luts[m_series] ) // outer loop to sweep selected source lookup table
{ {
if( i.e_use ) if( i.e_use )
{ {
for( const r_data& j : luts[m_series] ) // inner loop to combine values with itself for( const R_DATA& j : m_luts[m_series] ) // inner loop to combine values with itself
{ {
if( j.e_use ) if( j.e_use )
{ {
@ -173,7 +180,7 @@ uint32_t eserie::combine2( void )
} }
void eserie::combine3( uint32_t aSize ) void E_SERIE::combine3( uint32_t aSize )
{ {
uint32_t j = 0; uint32_t j = 0;
double tmp = 0; // avoid warning for being uninitialized double tmp = 0; // avoid warning for being uninitialized
@ -182,7 +189,7 @@ void eserie::combine3( uint32_t aSize )
m_results[S3R].e_use = false; // disable 3R solution, until m_results[S3R].e_use = false; // disable 3R solution, until
m_results[S3R].e_value = m_results[S2R].e_value; // 3R becomes better than 2R solution m_results[S3R].e_value = m_results[S2R].e_value; // 3R becomes better than 2R solution
for( const r_data& i : luts[m_series] ) // 3R Outer loop to selected primary E serie LUT for( const R_DATA& i : m_luts[m_series] ) // 3R Outer loop to selected primary E serie LUT
{ {
if( i.e_use ) // skip all excluded values if( i.e_use ) // skip all excluded values
{ {
@ -227,7 +234,7 @@ void eserie::combine3( uint32_t aSize )
} }
void eserie::Calculate( void ) void E_SERIE::Calculate( void )
{ {
uint32_t no_of_2Rcombi = 0; uint32_t no_of_2Rcombi = 0;
@ -242,7 +249,7 @@ void eserie::Calculate( void )
} }
void eserie::strip3( void ) void E_SERIE::strip3( void )
{ {
std::string s; std::string s;
@ -261,7 +268,7 @@ void eserie::strip3( void )
} }
void eserie::strip4( void ) void E_SERIE::strip4( void )
{ {
std::string s; std::string s;
@ -302,9 +309,9 @@ void PCB_CALCULATOR_FRAME::OnCalculateESeries( wxCommandEvent& event )
r.Exclude( 1000 * DoubleFromString( m_ResExclude2->GetValue())); r.Exclude( 1000 * DoubleFromString( m_ResExclude2->GetValue()));
r.Calculate(); r.Calculate();
fs = r.get_rslt()[S2R].e_name; // show 2R solution formula string fs = r.GetResults()[S2R].e_name; // show 2R solution formula string
m_ESeries_Sol2R->SetValue( fs ); m_ESeries_Sol2R->SetValue( fs );
error = reqr + r.get_rslt()[S2R].e_value; // absolute value of solution error = reqr + r.GetResults()[S2R].e_value; // absolute value of solution
error = ( reqr / error - 1 ) * 100; // error in percent error = ( reqr / error - 1 ) * 100; // error in percent
if( error ) if( error )
@ -321,9 +328,9 @@ void PCB_CALCULATOR_FRAME::OnCalculateESeries( wxCommandEvent& event )
m_ESeriesError2R->SetValue( es ); // anyway show 2R error string m_ESeriesError2R->SetValue( es ); // anyway show 2R error string
if( r.get_rslt()[S3R].e_use ) // if 3R solution available if( r.GetResults()[S3R].e_use ) // if 3R solution available
{ {
err3 = reqr + r.get_rslt()[S3R].e_value; // calculate the 3R err3 = reqr + r.GetResults()[S3R].e_value; // calculate the 3R
err3 = ( reqr / err3 - 1 ) * 100; // error in percent err3 = ( reqr / err3 - 1 ) * 100; // error in percent
if( err3 ) if( err3 )
@ -339,7 +346,7 @@ void PCB_CALCULATOR_FRAME::OnCalculateESeries( wxCommandEvent& event )
} }
m_ESeriesError3R->SetValue( es ); // show 3R error string m_ESeriesError3R->SetValue( es ); // show 3R error string
fs = r.get_rslt()[S3R].e_name; fs = r.GetResults()[S3R].e_name;
m_ESeries_Sol3R->SetValue( fs ); // show 3R formula string m_ESeries_Sol3R->SetValue( fs ); // show 3R formula string
} }
else // nothing better than 2R found else // nothing better than 2R found
@ -351,11 +358,11 @@ void PCB_CALCULATOR_FRAME::OnCalculateESeries( wxCommandEvent& event )
fs = wxEmptyString; fs = wxEmptyString;
if( r.get_rslt()[S4R].e_use ) // show 4R solution if available if( r.GetResults()[S4R].e_use ) // show 4R solution if available
{ {
fs = r.get_rslt()[S4R].e_name; fs = r.GetResults()[S4R].e_name;
error = reqr + r.get_rslt()[S4R].e_value; // absolute value of solution error = reqr + r.GetResults()[S4R].e_value; // absolute value of solution
error = ( reqr / error - 1 ) * 100; // error in percent error = ( reqr / error - 1 ) * 100; // error in percent
if( error ) if( error )

View File

@ -18,14 +18,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
extern double DoubleFromString( const wxString& TextValue );
/**
* If BENCHMARK is defined, any 4R E12 calculations will print its execution time to console
* My Hasswell Enthusiast reports 225 mSec what are reproducible within plusminus 2 percent
*/
//#define BENCHMARK
/** /**
* E-Values derived from a geometric sequence formula by Charles Renard were already * E-Values derived from a geometric sequence formula by Charles Renard were already
@ -114,13 +106,14 @@ enum { S2R, S3R, S4R };
{ true, "560K", 560000 },\ { true, "560K", 560000 },\
{ true, "820K", 820000 } { true, "820K", 820000 }
struct r_data { struct R_DATA
bool e_use; {
std::string e_name; bool e_use;
double e_value; std::string e_name;
}; double e_value;
};
class eserie class E_SERIE
{ {
public: public:
/** /**
@ -147,7 +140,7 @@ public:
void SetSeries( uint32_t aSeries ) { m_series = aSeries; } void SetSeries( uint32_t aSeries ) { m_series = aSeries; }
void SetRequiredValue( double aValue ) { m_required_value = aValue; } void SetRequiredValue( double aValue ) { m_required_value = aValue; }
std::array<r_data,S4R+1> get_rslt( void ) { return m_results; } std::array<R_DATA,S4R+1> GetResults( void ) { return m_results; }
private: private:
/** /**
@ -204,19 +197,21 @@ private:
void strip4( void ); void strip4( void );
private: private:
std::vector<std::vector<r_data>> luts { std::vector<std::vector<R_DATA>> m_luts
{ E1_VAL }, {
{ E1_VAL, E3_ADD }, { E1_VAL },
{ E1_VAL, E3_ADD, E6_ADD }, { E1_VAL, E3_ADD },
{ E1_VAL, E3_ADD, E6_ADD, E12_ADD } { E1_VAL, E3_ADD, E6_ADD },
}; { E1_VAL, E3_ADD, E6_ADD, E12_ADD }
};
/* /*
* TODO: Manual array size calculation is dangerous. Unlike legacy ANSI-C Arrays * TODO: Manual array size calculation is dangerous. Unlike legacy ANSI-C Arrays
* std::array can not drop length param by providing aggregate init list up * std::array can not drop length param by providing aggregate init list up
* to C++17. Reserved array size should be 2*E12² of std::vector primary list. * to C++17. Reserved array size should be 2*E12² of std::vector primary list.
* Exceeding memory limit 7442 will crash the calculator without any warnings ! * Exceeding memory limit 7442 will crash the calculator without any warnings !
* Compare to previous MAX_COMB macro for legacy ANSI-C array automatic solution * Compare to previous MAX_COMB macro for legacy ANSI-C array automatic solution
* #define E12_SIZE sizeof ( e12_lut ) / sizeof ( r_data ) * #define E12_SIZE sizeof ( e12_lut ) / sizeof ( R_DATA )
* #define MAX_COMB (2 * E12_SIZE * E12_SIZE) * #define MAX_COMB (2 * E12_SIZE * E12_SIZE)
* 2 component combinations including redundant swappable terms are for the moment * 2 component combinations including redundant swappable terms are for the moment
* 72 combinations for E1 * 72 combinations for E1
@ -225,11 +220,11 @@ private:
* 7442 combinations for E12 * 7442 combinations for E12
*/ */
#define MAX_CMB 7442 // maximum combinations for E12 #define MAX_CMB 7442 // maximum combinations for E12
std::array<r_data, MAX_CMB> m_cmb_lut; // intermediate 2R combinations std::array<R_DATA, MAX_CMB> m_cmb_lut; // intermediate 2R combinations
std::array<r_data, S4R+1> m_results; // 2R, 3R and 4R results std::array<R_DATA, S4R+1> m_results; // 2R, 3R and 4R results
uint32_t m_series = E6; // Radio Button State uint32_t m_series = E6; // Radio Button State
uint32_t m_enable_4R = false; // Check Box 4R enable uint32_t m_enable_4R = false; // Check Box 4R enable
double m_required_value =0.0; // required Resistor double m_required_value = 0.0; // required Resistor
}; };