netlist: code maintenance. (nw)

Fix visibility of classes in nlid_system.h.
Fix tidy warning for penum.
This commit is contained in:
couriersud 2020-06-06 20:41:37 +02:00
parent 3f9bb5d1ea
commit e3901f419c
5 changed files with 72 additions and 74 deletions

View File

@ -26,7 +26,7 @@ DOC = $(SRC)/documentation
TIDY_FLAGSX = -checks=*,-google*,-hicpp*,readability*,-fuchsia*,cert-*,-android-*, TIDY_FLAGSX = -checks=*,-google*,-hicpp*,readability*,-fuchsia*,cert-*,-android-*,
TIDY_FLAGSX += -llvm-header-guard,-cppcoreguidelines-pro-type-reinterpret-cast, TIDY_FLAGSX += -llvm-header-guard,-cppcoreguidelines-pro-type-reinterpret-cast,
#TIDY_FLAGSX += -cppcoreguidelines-pro-bounds-pointer-arithmetic, TIDY_FLAGSX += -cppcoreguidelines-pro-bounds-pointer-arithmetic,
#TIDY_FLAGSX += -cppcoreguidelines-owning-memory, #TIDY_FLAGSX += -cppcoreguidelines-owning-memory,
TIDY_FLAGSX += -modernize-use-default-member-init,-cppcoreguidelines-pro-bounds-constant-array-index, TIDY_FLAGSX += -modernize-use-default-member-init,-cppcoreguidelines-pro-bounds-constant-array-index,
TIDY_FLAGSX += -modernize-pass-by-value,-cppcoreguidelines-pro-type-static-cast-downcast, TIDY_FLAGSX += -modernize-pass-by-value,-cppcoreguidelines-pro-type-static-cast-downcast,
@ -39,7 +39,7 @@ TIDY_FLAGSX += -bugprone-too-small-loop-variable,
TIDY_FLAGSX += -modernize-use-trailing-return-type, TIDY_FLAGSX += -modernize-use-trailing-return-type,
TIDY_FLAGSX += -cppcoreguidelines-pro-bounds-array-to-pointer-decay, TIDY_FLAGSX += -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
TIDY_FLAGSX += -readability-magic-numbers,-readability-braces-around-statements, TIDY_FLAGSX += -readability-magic-numbers,-readability-braces-around-statements,
#TIDY_FLAGSX += -readability-implicit-bool-conversion, TIDY_FLAGSX += -readability-implicit-bool-conversion,
TIDY_FLAGSX += -readability-named-parameter,-readability-function-size, TIDY_FLAGSX += -readability-named-parameter,-readability-function-size,
TIDY_FLAGSX += -llvmlibc-restrict-system-libc-headers,-llvmlibc-implementation-in-namespace,-llvmlibc-callee-namespace, TIDY_FLAGSX += -llvmlibc-restrict-system-libc-headers,-llvmlibc-implementation-in-namespace,-llvmlibc-callee-namespace,
#TIDY_FLAGSX += -cppcoreguidelines-avoid-non-const-global-variables #TIDY_FLAGSX += -cppcoreguidelines-avoid-non-const-global-variables
@ -232,7 +232,7 @@ ALL_TIDY_FILES = $(ALL_OBJS:.o=.json)
SOURCES = $(patsubst $(OBJ)%, $(SRC)%, $(ALL_OBJS:.o=.cpp)) SOURCES = $(patsubst $(OBJ)%, $(SRC)%, $(ALL_OBJS:.o=.cpp))
ALLFILES = $(SOURCES) $(VSBUILDS) $(DOCS) ALLFILES = $(SOURCES) $(VSBUILDS) $(DOCS)
MAKEFILE_TARGETS_WITHOUT_INCLUDE := gcc9 clang clang-5 mingw doc native maketree MAKEFILE_TARGETS_WITHOUT_INCLUDE := gcc9 clang clang-5 mingw doc native maketree tidy
# git archive HEAD --prefix=project-name-version/ \ # git archive HEAD --prefix=project-name-version/ \
@ -317,7 +317,7 @@ nvcc:
$(MAKE) CC=/usr/local/cuda-10.2/bin/nvcc LD=/usr/local/cuda-10.2/bin/nvcc \ $(MAKE) CC=/usr/local/cuda-10.2/bin/nvcc LD=/usr/local/cuda-10.2/bin/nvcc \
OBJ=obj/nvcc CEXTRAFLAGS="--std c++14 -x cu -DNVCCBUILD=102 --expt-extended-lambda \ OBJ=obj/nvcc CEXTRAFLAGS="--std c++14 -x cu -DNVCCBUILD=102 --expt-extended-lambda \
--expt-relaxed-constexpr --default-stream per-thread --restrict \ --expt-relaxed-constexpr --default-stream per-thread --restrict \
--ftemplate-depth 1024 \ --ftemplate-depth 1024 \
-Xcompiler -O6 -Xcompiler -march=native -ccbin g++-8 " \ -Xcompiler -O6 -Xcompiler -march=native -ccbin g++-8 " \
DEPENDCC=g++ DEPENDCC=g++

View File

@ -35,16 +35,16 @@ namespace netlist
, m_RI(*this, "RI", nlconst::magic(400.0)) // around 250 for HC series, 400 on LS/TTL, estimated from datasheets , m_RI(*this, "RI", nlconst::magic(400.0)) // around 250 for HC series, 400 on LS/TTL, estimated from datasheets
{ {
register_subalias("GND", m_RN.m_R.N()); register_subalias("GND", m_RN.N());
register_subalias("VCC", m_RP.m_R.P()); register_subalias("VCC", m_RP.P());
register_subalias("C", m_RN.m_R.N()); register_subalias("C", m_RN.N());
register_subalias("RC", m_RN.m_R.P()); register_subalias("RC", m_RN.P());
connect(m_RP_Q, m_RP.m_I); connect(m_RP_Q, m_RP.I());
connect(m_RN_Q, m_RN.m_I); connect(m_RN_Q, m_RN.I());
connect(m_RN.m_R.P(), m_RP.m_R.N()); connect(m_RN.P(), m_RP.N());
connect(m_CV, m_RN.m_R.P()); connect(m_CV, m_RN.P());
m_RP.m_RON.set(m_RI()); m_RP.m_RON.set(m_RI());
m_RN.m_RON.set(m_RI()); m_RN.m_RON.set(m_RI());
@ -102,7 +102,7 @@ namespace netlist
if (m_state == 1) if (m_state == 1)
{ {
const nl_fptype vLow = m_KP * m_RP.m_R.P()(); const nl_fptype vLow = m_KP * m_RP.P()();
if (m_CV() < vLow) if (m_CV() < vLow)
{ {
m_RN_Q.push(0, NLTIME_FROM_NS(10)); // R_OFF m_RN_Q.push(0, NLTIME_FROM_NS(10)); // R_OFF
@ -111,7 +111,7 @@ namespace netlist
} }
if (m_state == 2) if (m_state == 2)
{ {
const nl_fptype vHigh = m_RP.m_R.P()() * (nlconst::one() - m_KP); const nl_fptype vHigh = m_RP.P()() * (nlconst::one() - m_KP);
if (m_CV() > vHigh) if (m_CV() > vHigh)
{ {
m_RP_Q.push(0, NLTIME_FROM_NS(10)); // R_OFF m_RP_Q.push(0, NLTIME_FROM_NS(10)); // R_OFF
@ -172,20 +172,20 @@ namespace netlist
register_subalias("3", m_A.m_CLRQ); register_subalias("3", m_A.m_CLRQ);
register_subalias("4", m_A.m_QQ); register_subalias("4", m_A.m_QQ);
register_subalias("5", m_B.m_Q); register_subalias("5", m_B.m_Q);
register_subalias("6", m_B.m_RN.m_R.N()); register_subalias("6", m_B.m_RN.N());
register_subalias("7", m_B.m_RN.m_R.P()); register_subalias("7", m_B.m_RN.P());
register_subalias("8", m_A.m_RN.m_R.N()); register_subalias("8", m_A.m_RN.N());
connect(m_A.m_RN.m_R.N(), m_B.m_RN.m_R.N()); connect(m_A.m_RN.N(), m_B.m_RN.N());
register_subalias("9", m_B.m_A); register_subalias("9", m_B.m_A);
register_subalias("10", m_B.m_B); register_subalias("10", m_B.m_B);
register_subalias("11", m_B.m_CLRQ); register_subalias("11", m_B.m_CLRQ);
register_subalias("12", m_B.m_QQ); register_subalias("12", m_B.m_QQ);
register_subalias("13", m_A.m_Q); register_subalias("13", m_A.m_Q);
register_subalias("14", m_A.m_RN.m_R.N()); register_subalias("14", m_A.m_RN.N());
register_subalias("15", m_A.m_RN.m_R.P()); register_subalias("15", m_A.m_RN.P());
register_subalias("16", m_A.m_RP.m_R.P()); register_subalias("16", m_A.m_RP.P());
connect(m_A.m_RP.m_R.P(), m_B.m_RP.m_R.P()); connect(m_A.m_RP.P(), m_B.m_RP.P());
} }
NETLIB_RESETI() {} NETLIB_RESETI() {}
NETLIB_UPDATEI() {} NETLIB_UPDATEI() {}
@ -200,25 +200,25 @@ namespace netlist
, m_A(*this, "A") , m_A(*this, "A")
, m_B(*this, "B") , m_B(*this, "B")
{ {
register_subalias("1", m_A.m_RN.m_R.N()); // C1 register_subalias("1", m_A.m_RN.N()); // C1
register_subalias("2", m_A.m_RN.m_R.P()); // RC1 register_subalias("2", m_A.m_RN.P()); // RC1
register_subalias("3", m_A.m_CLRQ); register_subalias("3", m_A.m_CLRQ);
register_subalias("4", m_A.m_B); register_subalias("4", m_A.m_B);
register_subalias("5", m_A.m_A); register_subalias("5", m_A.m_A);
register_subalias("6", m_A.m_Q); register_subalias("6", m_A.m_Q);
register_subalias("7", m_A.m_QQ); register_subalias("7", m_A.m_QQ);
register_subalias("8", m_A.m_RN.m_R.N()); register_subalias("8", m_A.m_RN.N());
connect(m_A.m_RN.m_R.N(), m_B.m_RN.m_R.N()); connect(m_A.m_RN.N(), m_B.m_RN.N());
register_subalias("9", m_B.m_QQ); register_subalias("9", m_B.m_QQ);
register_subalias("10", m_B.m_Q); register_subalias("10", m_B.m_Q);
register_subalias("11", m_B.m_A); register_subalias("11", m_B.m_A);
register_subalias("12", m_B.m_B); register_subalias("12", m_B.m_B);
register_subalias("13", m_B.m_CLRQ); register_subalias("13", m_B.m_CLRQ);
register_subalias("14", m_B.m_RN.m_R.P()); // RC2 register_subalias("14", m_B.m_RN.P()); // RC2
register_subalias("15", m_B.m_RN.m_R.N()); // C2 register_subalias("15", m_B.m_RN.N()); // C2
register_subalias("16", m_A.m_RP.m_R.P()); register_subalias("16", m_A.m_RP.P());
connect(m_A.m_RP.m_R.P(), m_B.m_RP.m_R.P()); connect(m_A.m_RP.P(), m_B.m_RP.P());
} }
NETLIB_RESETI() { } NETLIB_RESETI() { }
NETLIB_UPDATEI() { } NETLIB_UPDATEI() { }
@ -233,25 +233,25 @@ namespace netlist
, m_A(*this, "A") , m_A(*this, "A")
, m_B(*this, "B") , m_B(*this, "B")
{ {
register_subalias("1", m_A.m_RN.m_R.N()); // C1 register_subalias("1", m_A.m_RN.N()); // C1
register_subalias("2", m_A.m_RN.m_R.P()); // RC1 register_subalias("2", m_A.m_RN.P()); // RC1
register_subalias("3", m_A.m_CLRQ); register_subalias("3", m_A.m_CLRQ);
register_subalias("4", m_A.m_A); register_subalias("4", m_A.m_A);
register_subalias("5", m_A.m_B); register_subalias("5", m_A.m_B);
register_subalias("6", m_A.m_Q); register_subalias("6", m_A.m_Q);
register_subalias("7", m_A.m_QQ); register_subalias("7", m_A.m_QQ);
register_subalias("8", m_A.m_RN.m_R.N()); register_subalias("8", m_A.m_RN.N());
connect(m_A.m_RN.m_R.N(), m_B.m_RN.m_R.N()); connect(m_A.m_RN.N(), m_B.m_RN.N());
register_subalias("9", m_B.m_QQ); register_subalias("9", m_B.m_QQ);
register_subalias("10", m_B.m_Q); register_subalias("10", m_B.m_Q);
register_subalias("11", m_B.m_B); register_subalias("11", m_B.m_B);
register_subalias("12", m_B.m_A); register_subalias("12", m_B.m_A);
register_subalias("13", m_B.m_CLRQ); register_subalias("13", m_B.m_CLRQ);
register_subalias("14", m_B.m_RN.m_R.P()); // RC2 register_subalias("14", m_B.m_RN.P()); // RC2
register_subalias("15", m_B.m_RN.m_R.N()); // C2 register_subalias("15", m_B.m_RN.N()); // C2
register_subalias("16", m_A.m_RP.m_R.P()); register_subalias("16", m_A.m_RP.P());
connect(m_A.m_RP.m_R.P(), m_B.m_RP.m_R.P()); connect(m_A.m_RP.P(), m_B.m_RP.P());
} }
NETLIB_RESETI(); NETLIB_RESETI();
NETLIB_UPDATEI(); NETLIB_UPDATEI();

View File

@ -395,10 +395,10 @@ namespace devices
{ {
public: public:
NETLIB_CONSTRUCTOR(sys_dsw1) NETLIB_CONSTRUCTOR(sys_dsw1)
, m_R(*this, "_R")
, m_I(*this, "I")
, m_RON(*this, "RON", nlconst::one()) , m_RON(*this, "RON", nlconst::one())
, m_ROFF(*this, "ROFF", nlconst::magic(1.0E20)) , m_ROFF(*this, "ROFF", nlconst::magic(1.0E20))
, m_R(*this, "_R")
, m_I(*this, "I")
, m_last_state(*this, "m_last_state", 0) , m_last_state(*this, "m_last_state", 0)
{ {
register_subalias("1", m_R.P()); register_subalias("1", m_R.P());
@ -428,13 +428,19 @@ namespace devices
//NETLIB_UPDATE_PARAMI(); //NETLIB_UPDATE_PARAMI();
// used by 74123 //FIXME: used by 74123
analog::NETLIB_SUB(R_base) m_R;
logic_input_t m_I; const terminal_t &P() const noexcept { return m_R.P(); }
const terminal_t &N() const noexcept { return m_R.N(); }
const logic_input_t &I() const noexcept { return m_I; }
param_fp_t m_RON; param_fp_t m_RON;
param_fp_t m_ROFF; param_fp_t m_ROFF;
private: private:
analog::NETLIB_SUB(R_base) m_R;
logic_input_t m_I;
state_var<netlist_sig_t> m_last_state; state_var<netlist_sig_t> m_last_state;
}; };
@ -451,7 +457,6 @@ namespace devices
, m_I(*this, "I") , m_I(*this, "I")
, m_GON(*this, "GON", nlconst::magic(1e9)) // FIXME: all switches should have some on value , m_GON(*this, "GON", nlconst::magic(1e9)) // FIXME: all switches should have some on value
, m_GOFF(*this, "GOFF", nlconst::cgmin()) , m_GOFF(*this, "GOFF", nlconst::cgmin())
, m_last_state(*this, "m_last_state", 0)
, m_power_pins(*this) , m_power_pins(*this)
{ {
// connect and register pins // connect and register pins
@ -463,7 +468,6 @@ namespace devices
NETLIB_RESETI() NETLIB_RESETI()
{ {
m_last_state = 1;
m_R1.set_G(m_GOFF()); m_R1.set_G(m_GOFF());
m_R2.set_G(m_GON()); m_R2.set_G(m_GON());
} }
@ -471,45 +475,40 @@ namespace devices
NETLIB_UPDATEI() NETLIB_UPDATEI()
{ {
const netlist_sig_t state = m_I(); const netlist_sig_t state = m_I();
// FIXME: update should only be called if m_I changes
if (true || (state != m_last_state)) //printf("Here %d\n", state);
const nl_fptype G1 = (state != 0) ? m_GON() : m_GOFF();
const nl_fptype G2 = (state != 0) ? m_GOFF() : m_GON();
if (m_R1.solver() == m_R2.solver())
{ {
m_last_state = state; m_R1.change_state([this, &G1, &G2]()
//printf("Here %d\n", state);
const nl_fptype G1 = (state != 0) ? m_GON() : m_GOFF();
const nl_fptype G2 = (state != 0) ? m_GOFF() : m_GON();
if (m_R1.solver() == m_R2.solver())
{ {
m_R1.change_state([this, &G1, &G2]() m_R1.set_G(G1);
{ m_R2.set_G(G2);
m_R1.set_G(G1); });
m_R2.set_G(G2); }
}); else
} {
else m_R1.change_state([this, &G1]()
{ {
m_R1.change_state([this, &G1]() m_R1.set_G(G1);
{ });
m_R1.set_G(G1); m_R2.change_state([this, &G2]()
}); {
m_R2.change_state([this, &G2]() m_R2.set_G(G2);
{ });
m_R2.set_G(G2);
});
}
} }
} }
//NETLIB_UPDATE_PARAMI(); //NETLIB_UPDATE_PARAMI();
private:
analog::NETLIB_SUB(R_base) m_R1; analog::NETLIB_SUB(R_base) m_R1;
analog::NETLIB_SUB(R_base) m_R2; analog::NETLIB_SUB(R_base) m_R2;
logic_input_t m_I; logic_input_t m_I;
param_fp_t m_GON; param_fp_t m_GON;
param_fp_t m_GOFF; param_fp_t m_GOFF;
private:
state_var<netlist_sig_t> m_last_state;
nld_power_pins m_power_pins; nld_power_pins m_power_pins;
}; };
@ -550,13 +549,13 @@ namespace devices
//NETLIB_UPDATE_PARAMI(); //NETLIB_UPDATE_PARAMI();
private:
analog_input_t m_IP; analog_input_t m_IP;
analog_input_t m_IN; analog_input_t m_IN;
logic_output_t m_Q; logic_output_t m_Q;
logic_output_t m_QQ; logic_output_t m_QQ;
nld_power_pins m_power_pins; nld_power_pins m_power_pins;
private:
state_var<netlist_sig_t> m_last_state; state_var<netlist_sig_t> m_last_state;
}; };

View File

@ -1053,13 +1053,13 @@ namespace netlist
/// templatized generic device models do not have to do tons of /// templatized generic device models do not have to do tons of
/// template magic. /// template magic.
/// ///
/// This function throws an exception if actually called. /// This function terminates if actually called.
/// ///
[[noreturn]] static void set_tristate(netlist_sig_t v, [[noreturn]] static void set_tristate(netlist_sig_t v,
netlist_time ts_off_on, netlist_time ts_on_off) netlist_time ts_off_on, netlist_time ts_on_off)
{ {
plib::unused_var(v, ts_off_on, ts_on_off); plib::unused_var(v, ts_off_on, ts_on_off);
throw nl_exception("set_tristate on logic_output should never be called!"); plib::terminate("set_tristate on logic_output should never be called!");
} }
private: private:
logic_net_t m_my_net; logic_net_t m_my_net;

View File

@ -33,7 +33,6 @@ namespace plib
struct ename : public plib::penum_base { \ struct ename : public plib::penum_base { \
enum E { __VA_ARGS__ }; \ enum E { __VA_ARGS__ }; \
constexpr ename (const E &v) : m_v(v) { } \ constexpr ename (const E &v) : m_v(v) { } \
constexpr ename (E && v) : m_v(v) { } \
template <typename T> explicit constexpr ename(const T &val) { m_v = static_cast<E>(val); } \ template <typename T> explicit constexpr ename(const T &val) { m_v = static_cast<E>(val); } \
template <typename T> explicit constexpr ename(T && val) { m_v = static_cast<E>(val); } \ template <typename T> explicit constexpr ename(T && val) { m_v = static_cast<E>(val); } \
bool set_from_string (const pstring &s) { \ bool set_from_string (const pstring &s) { \