pcb_calculator/eserie.*: fix some coding style issues.
No actual code change (I hope...)
This commit is contained in:
parent
21d3662ed3
commit
78ddb1408f
|
@ -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 )
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue