mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
netlist: code maintenance. (nw)
Fix visibility of classes in nlid_system.h. Fix tidy warning for penum.
This commit is contained in:
parent
3f9bb5d1ea
commit
e3901f419c
@ -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++
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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) { \
|
||||||
|
Loading…
Reference in New Issue
Block a user