summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist')
-rw-r--r--src/lib/netlist/analog/nld_generic_models.h15
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h3
-rw-r--r--src/lib/netlist/build/cspell.json76
-rw-r--r--src/lib/netlist/build/makefile64
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/netlist.sln0
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/netlistlib.vcxproj0
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/netlistlib.vcxproj.filters0
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/nltool.vcxproj0
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/nltool.vcxproj.filters0
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/nlwav.vcxproj0
-rw-r--r--[-rwxr-xr-x]src/lib/netlist/buildVS/nlwav.vcxproj.filters0
-rw-r--r--src/lib/netlist/core/base_objects.h5
-rw-r--r--src/lib/netlist/core/core_device.h3
-rw-r--r--src/lib/netlist/core/exec.h5
-rw-r--r--src/lib/netlist/core/logic.h5
-rw-r--r--src/lib/netlist/core/nets.h16
-rw-r--r--src/lib/netlist/core/queue.h6
-rw-r--r--src/lib/netlist/devices/nld_74123.cpp2
-rw-r--r--src/lib/netlist/devices/nld_74164.cpp2
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp9
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx_lib.cpp6
-rw-r--r--src/lib/netlist/nl_base.cpp15
-rw-r--r--src/lib/netlist/nl_config.h26
-rw-r--r--src/lib/netlist/nl_errstr.h8
-rw-r--r--src/lib/netlist/nl_factory.h2
-rw-r--r--src/lib/netlist/nl_interface.h4
-rw-r--r--src/lib/netlist/nl_parser.cpp3
-rw-r--r--src/lib/netlist/nl_setup.cpp26
-rw-r--r--src/lib/netlist/nl_setup.h12
-rw-r--r--src/lib/netlist/nltypes.h3
-rw-r--r--src/lib/netlist/plib/gmres.h20
-rw-r--r--src/lib/netlist/plib/palloc.h18
-rw-r--r--src/lib/netlist/plib/pchrono.h2
-rw-r--r--src/lib/netlist/plib/pconfig.h36
-rw-r--r--src/lib/netlist/plib/pdynlib.cpp3
-rw-r--r--src/lib/netlist/plib/pdynlib.h7
-rw-r--r--src/lib/netlist/plib/pexception.cpp2
-rw-r--r--src/lib/netlist/plib/pexception.h2
-rw-r--r--src/lib/netlist/plib/pmath.h2
-rw-r--r--src/lib/netlist/plib/pomp.h4
-rw-r--r--src/lib/netlist/plib/poptions.cpp3
-rw-r--r--src/lib/netlist/plib/ppmf.cpp8
-rw-r--r--src/lib/netlist/plib/ppmf.h112
-rw-r--r--src/lib/netlist/plib/ppreprocessor.h4
-rw-r--r--src/lib/netlist/plib/prandom.h3
-rw-r--r--src/lib/netlist/plib/pstonum.h2
-rw-r--r--src/lib/netlist/plib/pstream.h9
-rw-r--r--src/lib/netlist/plib/ptests.h210
-rw-r--r--src/lib/netlist/plib/ptime.h3
-rw-r--r--src/lib/netlist/plib/ptypes.h45
-rw-r--r--src/lib/netlist/prg/nltool.cpp4
-rw-r--r--src/lib/netlist/prg/nlwav.cpp2
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp3
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.h9
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver_ext.h4
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp6
-rw-r--r--src/lib/netlist/tests/test_pmfp.cpp20
-rw-r--r--src/lib/netlist/tests/test_pmfp_multibase.cpp5
-rw-r--r--src/lib/netlist/tests/test_precommit.cpp26
-rw-r--r--src/lib/netlist/tools/nl_convert.cpp21
-rw-r--r--src/lib/netlist/tools/nl_convert.h2
61 files changed, 579 insertions, 334 deletions
diff --git a/src/lib/netlist/analog/nld_generic_models.h b/src/lib/netlist/analog/nld_generic_models.h
index 80650b4a218..aaac759b3f9 100644
--- a/src/lib/netlist/analog/nld_generic_models.h
+++ b/src/lib/netlist/analog/nld_generic_models.h
@@ -66,9 +66,8 @@ namespace netlist::analog
//return m_h * cap + m_gmin;
}
- nl_fptype Ieq(nl_fptype cap, nl_fptype v) const noexcept
+ nl_fptype Ieq(nl_fptype cap, [[maybe_unused]] nl_fptype v) const noexcept
{
- plib::unused_var(v);
//return -m_h * 0.5 * ((cap + m_c) * m_v + (cap - m_c) * v) ;
return -m_h * nlconst::half() * (cap + m_c) * m_v;
//return -m_h * cap * m_v;
@@ -109,15 +108,13 @@ namespace netlist::analog
static capacitor_e type() noexcept { return capacitor_e::CONSTANT_CAPACITY; }
nl_fptype G(nl_fptype cap) const noexcept { return cap * m_h + m_gmin; }
- nl_fptype Ieq(nl_fptype cap, nl_fptype v) const noexcept
+ nl_fptype Ieq(nl_fptype cap, [[maybe_unused]] nl_fptype v) const noexcept
{
- plib::unused_var(v);
return - G(cap) * m_v;
}
- void timestep(nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
+ void timestep([[maybe_unused]] nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
{
- plib::unused_var(cap);
m_h = plib::reciprocal(step);
m_v = v;
}
@@ -135,9 +132,10 @@ namespace netlist::analog
struct generic_capacitor_const
{
public:
- generic_capacitor_const(core_device_t &dev, const pstring &name)
+ generic_capacitor_const( /*[[maybe_unused]]*/ core_device_t &dev, /*[[maybe_unused]]*/ const pstring &name)
: m_gmin(nlconst::zero())
{
+ // gcc 7.2 (mingw) and 7.5 (ubuntu) don't accept maybe_unused here
plib::unused_var(dev, name);
}
@@ -163,13 +161,12 @@ namespace netlist::analog
struct generic_capacitor_const
{
public:
- generic_capacitor_const(core_device_t &dev, const pstring &name)
+ generic_capacitor_const( [[maybe_unused]] core_device_t &dev, [[maybe_unused]] const pstring &name)
: m_gmin(nlconst::zero())
, m_vn(0)
, m_in(0)
, m_trn(0.0)
{
- plib::unused_var(dev, name);
}
// Returns { G, Ieq }
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index 43e1902c5e7..1cbf750eaa3 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -58,9 +58,8 @@ namespace netlist::analog
return b ? *h : d2;
}
template<>
- inline core_device_t &bselect(bool b, netlist_state_t &d1, core_device_t &d2)
+ inline core_device_t &bselect(bool b, [[maybe_unused]] netlist_state_t &d1, core_device_t &d2)
{
- plib::unused_var(d1);
if (b)
throw nl_exception("bselect with netlist and b==true");
return d2;
diff --git a/src/lib/netlist/build/cspell.json b/src/lib/netlist/build/cspell.json
new file mode 100644
index 00000000000..d1035e868d4
--- /dev/null
+++ b/src/lib/netlist/build/cspell.json
@@ -0,0 +1,76 @@
+{
+"words" : [
+ "MAME",
+ "netlist",
+ "netlists",
+ "datasheet",
+ "cmos",
+ "opamp",
+ "opamps",
+ "mosfet",
+ "mosfets",
+ "Chebyshev",
+ "Fairchild",
+ "Schmitt",
+ "Transconductance",
+ "nmos",
+ "pmos",
+ "retriggerable", // not in leo
+ "presettable", // not in leo
+ "misformatted", // not in leo
+ "monostable",
+ "demultiplexer",
+ "demultiplexers",
+ "behavioural",
+ "highpass",
+ "nltool",
+ "nvcc",
+ "Couriersud",
+ "plib", // FIXME: Remove everything below here again
+ "ppmf"
+],
+"languageSettings": [
+ // This one works with Python
+ {
+ "languageId": "python",
+ "includeRegExpList": [
+ "/#.*/",
+ "/('''|\"\"\")[^\\1]+?\\1/g",
+ "strings"
+ ]
+ },
+ // This one works with JavaScript, Typescript, etc
+ {
+ "languageId": "javascript,typescript",
+ "includeRegExpList": [
+ "CStyleComment",
+ "strings"
+ ]
+ },
+ // Use with cpp or c files
+ {
+ "languageId": "cpp,c,h",
+ // Turn off compound words, because it is only checking strings.
+ "allowCompoundWords": false,
+ // Only check comments and strings
+ "includeRegExpList": [
+ "CStyleComment",
+ "string"
+ ],
+ "ignoreRegExpList": [
+ "/#include.*/", // Exclude includes, because they are also strings
+ "/#pragma.*/", // Exclude pragmas, they may include strings
+ "/\/\/ NOLINT:.*/", // Exclude clang-tidy instructions
+ "/\/\/\/ \\\\file.*/", // Doxygen
+ "/\/\/\/ \\\\addtogroup.*/", // Doxygen
+ "/`[^`]+`/", // Markup code formatt
+ "/} \/\/ namespace.*/", // Namespace comments
+ "/[A-Z][A-Z][A-Z][^\\s]*/", // Identifiers starting with at least 3 capital letters
+ // Project specific exclusions start here
+ "/\/\/ copyright-holders.*/",
+ "/\/\/- Pinalias:/",
+ "/\/\/#.*/" // commented source code
+ ]
+ }
+]
+}
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index b44ed3e727e..fab68ed5a0b 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -111,7 +111,7 @@ TIDY_DB = $(OBJ)/compile_commands.json
#LTO decreases performance :-(
#LTO = -flto=4 -fuse-linker-plugin -Wodr
-CCOREFLAGS = -g -O3 -std=c++17 -I$(SRC)
+CCOREFLAGS = -g -O3 -std=c++17 -I$(SRC) -I$(SRC)/..
CFLAGS = $(LTO) $(CCOREFLAGS) $(CEXTRAFLAGS)
LDFLAGS = $(LTO) -g -O3 -std=c++17 $(LDEXTRAFLAGS)
@@ -172,6 +172,16 @@ CORESOURCES := \
MAINSOURCES = $(SRC)/prg/nltool.cpp $(SRC)/prg/nlwav.cpp
+HEADERS = $(wildcard $(SRC)/analog/*.h)
+HEADERS += $(wildcard $(SRC)/core/*.h)
+HEADERS += $(wildcard $(SRC)/devices/*.h)
+HEADERS += $(wildcard $(SRC)/solver/*.h)
+HEADERS += $(wildcard $(SRC)/tools/*.h)
+HEADERS += $(wildcard $(SRC)/*.h)
+HEADERS += $(wildcard $(SRC)/generated/*.h)
+
+PHEADERS = $(wildcard $(SRC)/plib/*.h)
+
PSOURCES := \
$(PSRC)/pstring.cpp \
$(PSRC)/pdynlib.cpp \
@@ -191,15 +201,18 @@ TESTOBJS = $(patsubst $(SRC)%, $(OBJ)%, $(TESTSOURCES:.cpp=.o))
MAINOBJS = $(patsubst $(SRC)%, $(OBJ)%, $(MAINSOURCES:.cpp=.o))
POBJS = $(patsubst $(SRC)%, $(OBJ)%, $(PSOURCES:.cpp=.o))
-OBJS = $(POBJS) $(NLOBJS) $(NLDEVOBJS) $(TESTOBJS)
+OBJS = $(TESTOBJS) $(POBJS) $(NLOBJS) $(NLDEVOBJS) $(TESTOBJS)
+
+VSFILES = \
+ $(VSBUILD)/netlistlib.vcxproj \
+ $(VSBUILD)/netlistlib.vcxproj.filters \
+ $(VSBUILD)/nltool.vcxproj \
+ $(VSBUILD)/nltool.vcxproj.filters \
+ $(VSBUILD)/nlwav.vcxproj \
+ $(VSBUILD)/nlwav.vcxproj.filters \
+ $(VSBUILD)/netlist.sln \
-VSBUILDS = \
- $(VSBUILD/netlistlib.vcxproj) \
- $(VSBUILD/netlistlib.vcxproj.user \
- $(VSBUILD/nltool.vcxproj \
- $(VSBUILD/netlistlib.vcxproj.filters \
- $(VSBUILD/nltool.vcxproj.filters \
- $(VSBUILD/netlist.sln \
+OTHERFILES = makefile
DOCS = \
doxygen.conf \
@@ -213,7 +226,8 @@ ALL_OBJS = $(OBJS) $(MAINOBJS)
ALL_TIDY_FILES = $(ALL_OBJS:.o=.json)
ALLSOURCES = $(DEVSOURCES) $(CORESOURCES) $(TESTSOURCES) $(MAINSOURCES) $(PSOURCES)
-ALLFILES = $(ALLSOURCES) $(VSBUILDS) $(DOCS)
+ALLHEADERS = $(HEADERS) $(PHEADERS)
+ALLFILES = $(ALLSOURCES) $(VSFILES) $(DOCS) $(OTHERFILES)
MAKEFILE_TARGETS_WITHOUT_INCLUDE := \
clang clang-5 clang-libc gcc9 mingw native nvcc \
@@ -270,10 +284,10 @@ maketree: $(sort $(BUILD_DIRS))
#-------------------------------------------------
native:
- $(MAKE) CEXTRAFLAGS="-march=native -msse4.2 -Wall -Wpedantic -Wsign-compare -Wextra "
+ $(MAKE) CEXTRAFLAGS="-march=native -msse4.2 -Wall -Wpedantic -Wsign-compare -Wextra"
gcc9:
- $(MAKE) CC=g++-9 LD=g++-9 CEXTRAFLAGS="-march=native -Wall -pedantic -Wpedantic -fext-numeric-literals -Wsign-compare -Wextra" EXTRALIBS="-lquadmath"
+ $(MAKE) CC=g++-9 LD=g++-9 CEXTRAFLAGS="-march=native -Wall -pedantic -Wpedantic -fext-numeric-literals -Wsign-compare -Wextra" EXTRALIBS="-lquadmath" OBJ=obj/gcc9
emsdk:
emmake $(MAKE) CC=emcc LD=emcc CEXTRAFLAGS="-fexceptions" LDEXTRAFLAGS="-fexceptions --emrun" OBJ=obj/emsdk EXESUFFIX=.html
@@ -311,7 +325,7 @@ clang-libc:
nvcc:
$(MAKE) CC=/usr/local/cuda-11.3/bin/nvcc LD=/usr/local/cuda-11.3/bin/nvcc \
- OBJ=obj/nvcc CEXTRAFLAGS="--std c++17 -x cu -DNVCCBUILD=113 --expt-extended-lambda \
+ OBJ=obj/nvcc CEXTRAFLAGS="--std c++17 -x cu --expt-extended-lambda \
--expt-relaxed-constexpr --default-stream per-thread --restrict \
--ftemplate-depth 1024 \
-Xcompiler -O6 -Xcompiler -march=native -ccbin g++-9 " \
@@ -322,6 +336,12 @@ mingw:
-DWIN32_LEAN_AND_MEAN" LDEXTRAFLAGS="-Wl,--subsystem,console \
-municode" LIBS= MD=@mkdir.exe SHELL=sh.exe DOXYGEN=doxygen.exe $(PARAMS)
+mingw-cross:
+ ${MAKE} CC="x86_64-w64-mingw32-g++-posix" LD="x86_64-w64-mingw32-g++-posix" \
+ CEXTRAFLAGS="-DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501 -DWIN32_LEAN_AND_MEAN" \
+ LDEXTRAFLAGS="-Wl,--subsystem,console -municode" OBJ=obj/mingw-cross \
+ EXESUFFIX=.exe LIBS=
+
#-------------------------------------------------
# regression tests
#-------------------------------------------------
@@ -343,6 +363,10 @@ doc:
./nltool$(EXESUFFIX) -c docheader > ../documentation/devsyn.dox.h
$(DOXYGEN) doxygen.conf
+NLOBJS = $(patsubst $(SRC)%, $(OBJ)%, $(CORESOURCES:.cpp=.o))
+cspell:
+ cd .. && cspell -c build/cspell.json --no-color --relative $(patsubst $(SRC)/%, %, $(ALLHEADERS) $(ALLSOURCES)) | sed -e "s/ - Unknown/: error: Unknown/g"
+
#-------------------------------------------------
# depends
#-------------------------------------------------
@@ -384,6 +408,20 @@ $(SRC)/generated/nlm_modules_lib.cpp: $(MODULESOURCES)
generated: $(SRC)/generated/lib_entries.hxx $(SRC)/generated/nld_devinc.h $(SRC)/generated/nlm_modules_lib.cpp
#-------------------------------------------------
+# fix permissions, source management
+#-------------------------------------------------
+
+fix_permissions:
+ @find .. -executable -and -not -type d -print | grep -v /build | xargs -r chmod a-x
+ @chmod a-x $(ALLFILES)
+ @find .. -print | xargs setfacl -b
+
+srcclean: $(ALLSOURCES) $(ALLHEADERS)
+ @../../../../srcclean -u $(ALLSOURCES) $(ALLHEADERS)
+
+precommit: fix_permissions srcclean
+
+#-------------------------------------------------
# clang tidy
#-------------------------------------------------
diff --git a/src/lib/netlist/buildVS/netlist.sln b/src/lib/netlist/buildVS/netlist.sln
index ff0207d81a4..ff0207d81a4 100755..100644
--- a/src/lib/netlist/buildVS/netlist.sln
+++ b/src/lib/netlist/buildVS/netlist.sln
diff --git a/src/lib/netlist/buildVS/netlistlib.vcxproj b/src/lib/netlist/buildVS/netlistlib.vcxproj
index 47338e4c6c6..47338e4c6c6 100755..100644
--- a/src/lib/netlist/buildVS/netlistlib.vcxproj
+++ b/src/lib/netlist/buildVS/netlistlib.vcxproj
diff --git a/src/lib/netlist/buildVS/netlistlib.vcxproj.filters b/src/lib/netlist/buildVS/netlistlib.vcxproj.filters
index 2b7549429b1..2b7549429b1 100755..100644
--- a/src/lib/netlist/buildVS/netlistlib.vcxproj.filters
+++ b/src/lib/netlist/buildVS/netlistlib.vcxproj.filters
diff --git a/src/lib/netlist/buildVS/nltool.vcxproj b/src/lib/netlist/buildVS/nltool.vcxproj
index 508833656e0..508833656e0 100755..100644
--- a/src/lib/netlist/buildVS/nltool.vcxproj
+++ b/src/lib/netlist/buildVS/nltool.vcxproj
diff --git a/src/lib/netlist/buildVS/nltool.vcxproj.filters b/src/lib/netlist/buildVS/nltool.vcxproj.filters
index 52f522f23e8..52f522f23e8 100755..100644
--- a/src/lib/netlist/buildVS/nltool.vcxproj.filters
+++ b/src/lib/netlist/buildVS/nltool.vcxproj.filters
diff --git a/src/lib/netlist/buildVS/nlwav.vcxproj b/src/lib/netlist/buildVS/nlwav.vcxproj
index 239fcf7ba5c..239fcf7ba5c 100755..100644
--- a/src/lib/netlist/buildVS/nlwav.vcxproj
+++ b/src/lib/netlist/buildVS/nlwav.vcxproj
diff --git a/src/lib/netlist/buildVS/nlwav.vcxproj.filters b/src/lib/netlist/buildVS/nlwav.vcxproj.filters
index 7b114761bb4..7b114761bb4 100755..100644
--- a/src/lib/netlist/buildVS/nlwav.vcxproj.filters
+++ b/src/lib/netlist/buildVS/nlwav.vcxproj.filters
diff --git a/src/lib/netlist/core/base_objects.h b/src/lib/netlist/core/base_objects.h
index a9f8d41dfd0..2610dbdf72c 100644
--- a/src/lib/netlist/core/base_objects.h
+++ b/src/lib/netlist/core/base_objects.h
@@ -201,7 +201,7 @@ namespace netlist::detail {
/// Going forward setting this to 8 will allow 8-bit signal
/// busses to be used in netlist, e.g. for more complex memory
/// arrangements.
- /// Mimimum value is 2 here to support tristate output on proxies.
+ /// Minimum value is 2 here to support tristate output on proxies.
static constexpr const unsigned int INP_BITS = 2;
static constexpr const unsigned int INP_MASK = (1 << INP_BITS) - 1;
@@ -264,9 +264,8 @@ namespace netlist::detail {
state_var_sig m_Q;
#else
- void set_copied_input(const netlist_sig_t &val) const noexcept { plib::unused_var(val); } // NOLINT: static means more message elsewhere
+ void set_copied_input([[maybe_unused]] const netlist_sig_t &val) const noexcept { } // NOLINT: static means more message elsewhere
#endif
-
void set_delegate(const nldelegate &delegate) noexcept { m_delegate = delegate; }
const nldelegate &delegate() const noexcept { return m_delegate; }
void run_delegate() const noexcept { return m_delegate(); }
diff --git a/src/lib/netlist/core/core_device.h b/src/lib/netlist/core/core_device.h
index 5b402ab102a..2cefb3d4c58 100644
--- a/src/lib/netlist/core/core_device.h
+++ b/src/lib/netlist/core/core_device.h
@@ -85,7 +85,8 @@ namespace netlist
log_type & log();
public:
- virtual void timestep(timestep_type ts_type, nl_fptype st) noexcept { plib::unused_var(ts_type, st); }
+ virtual void timestep([[maybe_unused]] timestep_type ts_type,
+ [[maybe_unused]] nl_fptype st) noexcept { }
virtual void update_terminals() noexcept { }
virtual void update_param() noexcept {}
diff --git a/src/lib/netlist/core/exec.h b/src/lib/netlist/core/exec.h
index 2099f04b065..cab482ff218 100644
--- a/src/lib/netlist/core/exec.h
+++ b/src/lib/netlist/core/exec.h
@@ -70,11 +70,10 @@ namespace netlist
// only used by nltool to create static c-code
devices::nld_solver *solver() const noexcept { return m_solver; }
- // force late type resolution
+ // FIXME: force late type resolution
template <typename X = devices::nld_solver>
- nl_fptype gmin(X *solv = nullptr) const noexcept
+ nl_fptype gmin([[maybe_unused]] X *solv = nullptr) const noexcept
{
- plib::unused_var(solv);
return static_cast<X *>(m_solver)->gmin();
}
diff --git a/src/lib/netlist/core/logic.h b/src/lib/netlist/core/logic.h
index 51ddf0b9d18..350acc2995d 100644
--- a/src/lib/netlist/core/logic.h
+++ b/src/lib/netlist/core/logic.h
@@ -140,10 +140,9 @@ namespace netlist
///
/// This function terminates if actually called.
///
- [[noreturn]] static void set_tristate(netlist_sig_t v,
- netlist_time ts_off_on, netlist_time ts_on_off)
+ [[noreturn]] static void set_tristate([[maybe_unused]] netlist_sig_t v,
+ [[maybe_unused]] netlist_time ts_off_on, [[maybe_unused]] netlist_time ts_on_off)
{
- plib::unused_var(v, ts_off_on, ts_on_off);
plib::terminate("set_tristate on logic_output should never be called!");
}
private:
diff --git a/src/lib/netlist/core/nets.h b/src/lib/netlist/core/nets.h
index 921e4670ba4..f3f4080b86b 100644
--- a/src/lib/netlist/core/nets.h
+++ b/src/lib/netlist/core/nets.h
@@ -17,11 +17,9 @@
#include "../plib/plists.h"
#include "../plib/pstring.h"
-// Enable the setting below to avoid queue pushes were at execution
-// no action will be taken. This is academically cleaner, but slower than
-// allowing this to happen and filter it during during "process".
-
-#define AVOID_NOOP_QUEUE_PUSHES (0)
+#ifndef AVOID_NOOP_QUEUE_PUSHES
+#error AVOID_NOOP_QUEUE_PUSHES not defined
+#endif
namespace netlist
{
@@ -72,12 +70,12 @@ namespace netlist
m_next_scheduled_time = exec().time() + delay;
#if (AVOID_NOOP_QUEUE_PUSHES)
- m_in_queue = (m_list_active.empty() ? queue_status::DELAYED_DUE_TO_INACTIVE
- : (m_new_Q != m_cur_Q ? queue_status::QUEUED : queue_status::DELIVERED));
+ m_in_queue = (m_list_active.empty() ? queue_status::DELAYED_DUE_TO_INACTIVE
+ : (m_new_Q != m_cur_Q ? queue_status::QUEUED : queue_status::DELIVERED));
if (m_in_queue == queue_status::QUEUED)
exec().qpush(m_next_scheduled_time, this);
- else
- update_inputs();
+ else
+ update_inputs();
#else
m_in_queue = m_list_active.empty() ? queue_status::DELAYED_DUE_TO_INACTIVE : queue_status::QUEUED;
if (m_in_queue == queue_status::QUEUED)
diff --git a/src/lib/netlist/core/queue.h b/src/lib/netlist/core/queue.h
index 6286f407fc5..ea76c6851bc 100644
--- a/src/lib/netlist/core/queue.h
+++ b/src/lib/netlist/core/queue.h
@@ -76,9 +76,8 @@ namespace netlist::detail
manager.save_item(this, &m_times[0], module + "." + "times", m_times.size());
manager.save_item(this, &m_net_ids[0], module + "." + "names", m_net_ids.size());
}
- void on_pre_save(plib::state_manager_t &manager) override
+ void on_pre_save([[maybe_unused]] plib::state_manager_t &manager) override
{
- plib::unused_var(manager);
m_qsize = this->size();
for (std::size_t i = 0; i < m_qsize; i++ )
{
@@ -86,9 +85,8 @@ namespace netlist::detail
m_net_ids[i] = m_get_id(this->listptr()[i].object());
}
}
- void on_post_load(plib::state_manager_t &manager) override
+ void on_post_load([[maybe_unused]] plib::state_manager_t &manager) override
{
- plib::unused_var(manager);
this->clear();
for (std::size_t i = 0; i < m_qsize; i++ )
{
diff --git a/src/lib/netlist/devices/nld_74123.cpp b/src/lib/netlist/devices/nld_74123.cpp
index b7f4749d5b0..8f415cfa660 100644
--- a/src/lib/netlist/devices/nld_74123.cpp
+++ b/src/lib/netlist/devices/nld_74123.cpp
@@ -250,7 +250,7 @@ namespace netlist::devices {
{
return ((in[0]() ^ 1) | (in[1]() ^ 1)) & in[2](); // (~A1 | ~A2) & B
}
- template<typename T> static constexpr netlist_sig_t clear(const T &in) { plib::unused_var(in); return 1;}
+ template<typename T> static constexpr netlist_sig_t clear( [[maybe_unused]] const T &in) { return 1; }
};
struct desc_9602 : public desc_74123
diff --git a/src/lib/netlist/devices/nld_74164.cpp b/src/lib/netlist/devices/nld_74164.cpp
index c2df89bcd50..878e333df0f 100644
--- a/src/lib/netlist/devices/nld_74164.cpp
+++ b/src/lib/netlist/devices/nld_74164.cpp
@@ -26,7 +26,7 @@
***********************************************************************
Function Table:
+-------------------------+----------------+
- | Inputs | Qutputs* |
+ | Inputs | Outputs* |
+-------+-------+---------+----------------+
| Clear | Clock | A B | QA QB ... QH |
+-------+-------+---------+----------------+
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index d4b0080ca60..9fb8ddc1bae 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -1,9 +1,10 @@
// license:BSD-3-Clause
// copyright-holders:Couriersud
-/*
- * nlid_proxy.cpp
- *
- */
+
+///
+/// \file nlid_proxy.cpp
+///
+///
#include "nlid_proxy.h"
#include "core/setup.h"
diff --git a/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp b/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
index bb95592825c..ad005764b0c 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
@@ -1411,7 +1411,7 @@ NETLIST_END()
//- Package: DIP
//- NamingConvention: Naming conventions follow National Semiconductor datasheet
//- FunctionTable:
-//- pdf.datasheetcatalog.com/datasheet/nationalsemiconductor/DS006367.PDF
+//- http://pdf.datasheetcatalog.com/datasheet/nationalsemiconductor/DS006367.PDF
//-
//- +------+-----+---+---++---+----+
//- | CLRQ | CLK | J | K || Q | QQ |
@@ -2658,7 +2658,7 @@ static NETLIST_START(TTL_9312_DIP)
)
NETLIST_END()
-// FIXME: Documenation
+// FIXME: Documentation
static NETLIST_START(TTL_9314_DIP)
TTL_9314(A)
@@ -2750,7 +2750,7 @@ static NETLIST_START(TTL_9321_DIP)
NETLIST_END()
-//FIXME: Documenation
+//FIXME: Documentation
static NETLIST_START(TTL_9334_DIP)
TTL_9334(A)
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index e349fb77746..bdd9b1ac52c 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -216,7 +216,7 @@ namespace netlist
ENTRY_EX(config::use_float_matrix::value)
ENTRY_EX(config::use_long_double_matrix::value)
ENTRY(NL_DEBUG)
- ENTRY(NVCCBUILD)
+ ENTRY(__NVCC__)
ENTRY(__cplusplus)
ENTRY(__VERSION__)
@@ -275,7 +275,7 @@ namespace netlist
void netlist_t::reset()
{
- log().debug("Searching for mainclock\n");
+ log().debug("Searching for main clock\n");
m_mainclock = m_state.get_single_device<devices::NETLIB_NAME(mainclock)>("mainclock");
log().debug("Searching for solver\n");
@@ -447,7 +447,7 @@ namespace netlist
{
auto *ep = entry.second.get();
auto *stats = ep->stats();
- // Factor of 3 offers best performace increase
+ // Factor of 3 offers best performance increase
if (stats->m_stat_inc_active() > 3 * stats->m_stat_total_time.count()
&& stats->m_stat_inc_active() > trigger)
log().verbose("HINT({}, NO_DEACTIVATE) // {} {} {}", ep->name(),
@@ -725,7 +725,7 @@ namespace netlist
// NOLINTNEXTLINE(readability-implicit-bool-conversion)
if (!(gt && go && Idr) && (gt || go || Idr))
{
- throw nl_exception("Inconsistent nullptrs for terminal {}", name());
+ throw nl_exception("Either all pointers must be set or none for terminal {}", name());
}
m_gt = gt;
@@ -768,11 +768,10 @@ namespace netlist
// logic_output_t
// ----------------------------------------------------------------------------------------
- logic_output_t::logic_output_t(device_t &dev, const pstring &aname, bool dummy)
+ logic_output_t::logic_output_t(device_t &dev, const pstring &aname, [[maybe_unused]] bool dummy)
: logic_t(dev, aname, STATE_OUT, nldelegate())
, m_my_net(dev.state(), name() + ".net", this)
{
- plib::unused_var(dummy);
this->set_net(&m_my_net);
state().register_net(device_arena::owned_ptr<logic_net_t>(&m_my_net, false));
state().setup().register_term(*this);
@@ -829,7 +828,7 @@ namespace netlist
// Parameters ...
// ----------------------------------------------------------------------------------------
- // deviceless, it's the responsibility of the owner to register!
+ // device-less, it's the responsibility of the owner to register!
param_t::param_t(const pstring &name)
: device_object_t(nullptr, name)
{
@@ -880,7 +879,7 @@ namespace netlist
param_str_t::param_str_t(netlist_state_t &state, const pstring &name, const pstring &val)
: param_t(name)
{
- // deviceless parameter, no registration, owner is responsible
+ // device-less parameter, no registration, owner is responsible
m_param = plib::make_unique<pstring, host_arena>(val);
*m_param = state.setup().get_initial_param_val(this->name(),val);
}
diff --git a/src/lib/netlist/nl_config.h b/src/lib/netlist/nl_config.h
index 41b16c78bc4..2ea84f37ba7 100644
--- a/src/lib/netlist/nl_config.h
+++ b/src/lib/netlist/nl_config.h
@@ -44,7 +44,6 @@
/// again. Compiling in all solvers may increase compile
/// time significantly.
///
-
#ifndef NL_USE_ACADEMIC_SOLVERS
#define NL_USE_ACADEMIC_SOLVERS (1)
#endif
@@ -58,33 +57,40 @@
/// By default it is disabled since it is not as fast as
/// the default approach. It is up to 20% slower.
///
-
#ifndef NL_USE_COPY_INSTEAD_OF_REFERENCE
-#define NL_USE_COPY_INSTEAD_OF_REFERENCE (0)//FIXME: Move to config struct later
+#define NL_USE_COPY_INSTEAD_OF_REFERENCE (0) // FIXME: Move to config struct later
#endif
/// \brief Use backward Euler integration
///
/// This will use backward Euler instead of trapezoidal integration.
///
-/// FIXME: Longterm this will become a runtime setting. Only the capacitor model
+/// FIXME: Long term this will become a runtime setting. Only the capacitor model
/// currently has a trapezoidal version and there is no support currently for
/// variable capacitors.
/// The change will have impact on timings since trapezoidal improves timing
/// accuracy.
-
#ifndef NL_USE_BACKWARD_EULER
-#define NL_USE_BACKWARD_EULER (1)
+#define NL_USE_BACKWARD_EULER (1) // FIXME: Move to config struct later
#endif
-/// \brief Use the __float128 type for matrix calculations.
+/// \brief Compile matrix solvers using the __float128 type.
///
/// Defaults to \ref PUSE_FLOAT128
-
#ifndef NL_USE_FLOAT128
#define NL_USE_FLOAT128 PUSE_FLOAT128
#endif
+/// \brief Avoid unnecessary queue pushes
+///
+/// Enable the setting below to avoid queue pushes were at execution
+/// no action will be taken. This is academically cleaner, but slower than
+/// allowing this to happen and filter it during during "process".
+/// This is used in core/nets.h
+#ifndef AVOID_NOOP_QUEUE_PUSHES
+#define AVOID_NOOP_QUEUE_PUSHES (0) // FIXME: Move to config struct later
+#endif
+
//============================================================
// DEBUGGING
//============================================================
@@ -149,8 +155,8 @@ namespace netlist
/// \brief Resolution as clocks per second for timing
///
- /// Uses 100 pico second resolution. This is aligned to MAME's
- /// attotime resolution.
+ /// Uses 100 picosecond resolution. This is aligned to MAME's
+ /// `attotime` resolution.
///
/// The table below shows the maximum run times depending on
/// time type size and resolution.
diff --git a/src/lib/netlist/nl_errstr.h b/src/lib/netlist/nl_errstr.h
index b8f9340bad9..bca9d5c93ce 100644
--- a/src/lib/netlist/nl_errstr.h
+++ b/src/lib/netlist/nl_errstr.h
@@ -53,7 +53,7 @@ namespace netlist
PERRMSGV(MF_TT_LINE_WITHOUT_HEAD, 0, "TT_LINE found without TT_HEAD")
PERRMSGV(MF_LOCAL_SOURCE_NOT_FOUND_1, 1, "Local source not found: <{1}>")
PERRMSGV(MF_EXTERNAL_SOURCE_IS_LOCAL_1, 1, "External lib entry appears as a local one: <{1}>")
- PERRMSGV(MF_TRUTHTABLE_NOT_FOUND_1, 1, "Truthtable not found: <{1}>")
+ PERRMSGV(MF_TRUTHTABLE_NOT_FOUND_1, 1, "Truth table not found: <{1}>")
// nl_setup.cpp
@@ -99,7 +99,7 @@ namespace netlist
PERRMSGV(MW_CONNECTING_1_TO_ITSELF, 1, "Connecting net {1} to itself.")
PERRMSGV(MI_CONNECTING_1_TO_2_SAME_NET, 3, "Connecting terminals {1} and {2} which are already both on net {3}. "
"It is ok if you read this warning and it relates to pin which is connected internally to GND and the schematics "
- "show an external connection as well. Onde example is the CD4538. In other cases this warning may indicate "
+ "show an external connection as well. One example is the CD4538. In other cases this warning may indicate "
"an error in your netlist.")
PERRMSGV(ME_NC_PIN_1_WITH_CONNECTIONS, 1, "Found NC (not connected) terminal {1} with connections")
PERRMSGV(MI_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS,1, "Found analog output {1} without connections")
@@ -119,7 +119,7 @@ namespace netlist
"but has been forced to act as a logic output. Parameter "
" FORCE_TRISTATE_LOGIC for device {2} needs to be disabled!.")
- PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to railterminals {2}/{3}."
+ PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to rail terminals {2}/{3}."
" This may reflect the schematic - but as well be an error. Please review.")
PERRMSGV(MW_DATA_1_NOT_FOUND, 1, "unable to find data {1} in sources collection")
@@ -140,7 +140,7 @@ namespace netlist
// nld_matrix_solver.cpp
PERRMSGV(MF_UNHANDLED_ELEMENT_1_FOUND, 1, "setup_base:unhandled element <{1}> found")
- PERRMSGV(MF_FOUND_TERM_WITH_MISSING_OTHERNET, 1, "found term with missing othernet {1}")
+ PERRMSGV(MF_FOUND_TERM_WITH_MISSING_OTHERNET, 1, "found term with missing other net {1}")
PERRMSGV(MW_NEWTON_LOOPS_EXCEEDED_INVOCATION_3, 3, "NEWTON_LOOPS exceeded resolution invoked {1} times on net {2} at {3} us")
PERRMSGV(MW_NEWTON_LOOPS_EXCEEDED_ON_NET_2, 2, "NEWTON_LOOPS exceeded resolution failed on net {1} ... reschedule at {2} us")
diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h
index 38db6446403..a5981ef8e54 100644
--- a/src/lib/netlist/nl_factory.h
+++ b/src/lib/netlist/nl_factory.h
@@ -129,7 +129,6 @@ namespace factory {
const pstring &name, std::tuple<Args...>& args, std::index_sequence<Is...>)
{
return plib::make_unique<C>(pool, anetlist, name, std::forward<Args>(std::get<Is>(args))...);
- //return anetlist.make_pool_object<C>(anetlist, name, std::forward<Args>(std::get<Is>(args))...);
}
dev_uptr make_device(device_arena &pool,
@@ -144,7 +143,6 @@ namespace factory {
const pstring &name) override
{
return make_device(pool, anetlist, name, m_args);
- //return pool.make_unique<C>(anetlist, name);
}
static uptr create(const pstring &name, properties &&props, Args&&... args)
diff --git a/src/lib/netlist/nl_interface.h b/src/lib/netlist/nl_interface.h
index c601b6a41fe..8916c55fc74 100644
--- a/src/lib/netlist/nl_interface.h
+++ b/src/lib/netlist/nl_interface.h
@@ -33,6 +33,7 @@ namespace netlist
/// The following code is an example on how to add the device to
/// the netlist factory.
///
+ /// ```
/// const pstring pin(m_in);
/// pstring dname = pstring("OUT_") + pin;
///
@@ -48,7 +49,7 @@ namespace netlist
///
/// parser.factory().add<cb_t, netlist::nl_fptype, lb_t>(dname,
/// netlist::factory::properties("-", PSOURCELOC()), 1e-6, std::forward<lb_t>(lambda));
- ///
+ /// ```
template <typename FUNC>
NETLIB_OBJECT(analog_callback)
@@ -160,7 +161,6 @@ namespace netlist
if (m_buffer != nullptr)
{
const nl_fptype v = (*m_buffer)[m_pos];
- //m_params[i]->set(v * m_param_mults[i]() + m_param_offsets[i]());
m_param_setter(v * m_param_mult() + m_param_offset());
}
}
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp
index 0716d5bbfc2..cbca285718e 100644
--- a/src/lib/netlist/nl_parser.cpp
+++ b/src/lib/netlist/nl_parser.cpp
@@ -576,9 +576,8 @@ bool source_token_t::parse(nlparse_t &setup, const pstring &name)
return false;
}
-plib::istream_uptr source_token_t::stream(const pstring &name)
+plib::istream_uptr source_token_t::stream([[maybe_unused]] const pstring &name)
{
- plib::unused_var(name);
return plib::istream_uptr();
}
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 6ccc5fdc86a..a757456f6bf 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -135,7 +135,7 @@ namespace netlist
}
pstring paramfq = name + "." + tp;
- log().debug("Defparam: {1}\n", paramfq);
+ log().debug("Default parameter: {1}\n", paramfq);
register_param(paramfq, *ptok);
@@ -496,12 +496,12 @@ pstring setup_t::termtype_as_str(detail::core_terminal_t &in)
pstring setup_t::get_initial_param_val(const pstring &name, const pstring &def) const
{
- // when get_intial_param_val is called the parameter <name> is already registered
- // and the value (valstr()) is set to the default value, e.g. "74XX"
- // If thus $(IC5E.A.MODEL) is given for name=="IC5E.A.MODEL" valstr() below
+ // When `get_intial_param_val` is called the parameter `<name>` is already registered
+ // and the value `(valstr())` is set to the default value, e.g. "74XX"
+ // If thus `$(IC5E.A.MODEL)` is given for `name=="IC5E.A.MODEL"` `valstr()` below
// will return the default.
// FIXME: It may be more explicit and stable to test if pattern==name and return
- // def in this case.
+ // `def` in this case.
auto i = m_abstract.m_param_values.find(name);
auto found_pat(false);
@@ -839,7 +839,7 @@ void setup_t::merge_nets(detail::net_t &thisnet, detail::net_t &othernet)
if (othernet.is_rail_net())
{
- log().debug("othernet is railnet\n");
+ log().debug("other net is a rail net\n");
merge_nets(othernet, thisnet);
}
else
@@ -1704,25 +1704,22 @@ bool source_netlist_t::parse(nlparse_t &setup, const pstring &name)
return (!strm.empty()) ? setup.parse_stream(std::move(strm), name) : false;
}
-plib::istream_uptr source_string_t::stream(const pstring &name)
+plib::istream_uptr source_string_t::stream([[maybe_unused]] const pstring &name)
{
- plib::unused_var(name);
plib::istream_uptr ret(std::make_unique<std::istringstream>(putf8string(m_str)), name);
ret->imbue(std::locale::classic());
return ret;
}
-plib::istream_uptr source_mem_t::stream(const pstring &name)
+plib::istream_uptr source_mem_t::stream( [[maybe_unused]] const pstring &name)
{
- plib::unused_var(name);
plib::istream_uptr ret(std::make_unique<std::istringstream>(m_str, std::ios_base::binary), name);
ret->imbue(std::locale::classic());
return ret;
}
-plib::istream_uptr source_file_t::stream(const pstring &name)
+plib::istream_uptr source_file_t::stream( [[maybe_unused]] const pstring &name)
{
- plib::unused_var(name);
auto f = std::make_unique<plib::ifstream>(plib::filesystem::u8path(m_filename));
if (f->is_open())
{
@@ -1732,7 +1729,7 @@ plib::istream_uptr source_file_t::stream(const pstring &name)
return plib::istream_uptr();
}
-plib::istream_uptr source_pattern_t::stream(const pstring &name)
+plib::istream_uptr source_pattern_t::stream( [[maybe_unused]] const pstring &name)
{
pstring filename = plib::pfmt(m_pattern)(m_force_lowercase ? plib::lcase(name) : name);
auto f = std::make_unique<plib::ifstream>(plib::filesystem::u8path(filename));
@@ -1756,9 +1753,8 @@ bool source_proc_t::parse(nlparse_t &setup, const pstring &name)
return false;
}
-plib::istream_uptr source_proc_t::stream(const pstring &name)
+plib::istream_uptr source_proc_t::stream( [[maybe_unused]] const pstring &name)
{
- plib::unused_var(name);
return plib::istream_uptr();
}
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index a4e9e626521..14c011fe2e2 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -37,7 +37,7 @@
#define DIPPINS(pin1, ...) \
setup.register_dip_alias_arr( # pin1 ", " # __VA_ARGS__);
-// to be used to reference new library truthtable devices
+// to be used to reference new library truth table devices
#define NET_REGISTER_DEV(type, name) \
setup.register_dev(# type, # name);
@@ -69,9 +69,8 @@
void NETLIST_NAME(name)(netlist::nlparse_t &setup);
#define NETLIST_START(name) \
-void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
+void NETLIST_NAME(name)([[maybe_unused]] netlist::nlparse_t &setup) \
{ \
- plib::unused_var(setup);
#define NETLIST_END() }
@@ -105,7 +104,7 @@ void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
setup.register_frontier(# attach, PSTRINGIFY_VA(r_in), PSTRINGIFY_VA(r_out));
// -----------------------------------------------------------------------------
-// truthtable defines
+// truth table defines
// -----------------------------------------------------------------------------
#define TRUTHTABLE_START(cname, in, out, pdef_params) \
@@ -139,7 +138,7 @@ namespace netlist
{
// -----------------------------------------------------------------------------
- // truthtable desc
+ // truth table desc
// -----------------------------------------------------------------------------
struct tt_desc
@@ -186,7 +185,7 @@ namespace netlist
void register_link(const pstring &sin, const pstring &sout);
void register_link_arr(const pstring &terms);
- // also called from devices for latebinding connected terminals
+ // also called from devices for late binding connected terminals
void register_link_fqn(const pstring &sin, const pstring &sout);
void register_param(const pstring &param, const pstring &value);
@@ -268,7 +267,6 @@ namespace netlist
plib::psource_collection_t m_sources;
detail::abstract_t & m_abstract;
- //std::unordered_map<pstring, parser_t::token_store> m_source_cache;
log_type &m_log;
unsigned m_frontier_cnt;
};
diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h
index 6d6fd2eb530..2c0ec0c1ad2 100644
--- a/src/lib/netlist/nltypes.h
+++ b/src/lib/netlist/nltypes.h
@@ -202,9 +202,8 @@ namespace netlist
template<netlist_time::internal_type value0>
struct times_ns1
{
- static constexpr netlist_time value(std::size_t N = 0)
+ static constexpr netlist_time value([[maybe_unused]] std::size_t N = 0)
{
- plib::unused_var(N);
return NLTIME_FROM_NS(value0);
}
};
diff --git a/src/lib/netlist/plib/gmres.h b/src/lib/netlist/plib/gmres.h
index 1beb4b20041..91a06371b33 100644
--- a/src/lib/netlist/plib/gmres.h
+++ b/src/lib/netlist/plib/gmres.h
@@ -81,12 +81,11 @@ namespace plib
template <typename FT, int SIZE>
struct mat_precondition_diag
{
- mat_precondition_diag(std::size_t size, int dummy = 0)
+ mat_precondition_diag(std::size_t size, [[maybe_unused]] int dummy = 0)
: m_mat(size)
, m_diag(size)
, nzcol(size)
{
- plib::unused_var(dummy);
}
template <typename M>
@@ -120,19 +119,19 @@ namespace plib
// ILUT: 265%
FT v(0.0);
#if 0
- // doesn't works, Mame perforamnce drops significantly%
+ // doesn't works, Mame performance drops significantly%
// 136%
for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
v += m_mat.A[j] * m_mat.A[j];
m_diag[i] = reciprocal(std::sqrt(v));
#elif 0
- // works halfway, i.e. Mame perforamnce 50%
+ // works halfway, i.e. Mame performance 50%
// 147% - lowest average solution time with 7.094
for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
v += m_mat.A[j] * m_mat.A[j];
m_diag[i] = m_mat.A[m_mat.diag[i]] / v;
#elif 0
- // works halfway, i.e. Mame perforamnce 50%
+ // works halfway, i.e. Mame performance 50%
// sum over column i
// 344% - lowest average solution time with 3.06
std::size_t nzcolp = 0;
@@ -145,7 +144,7 @@ namespace plib
}
m_diag[i] = m_mat.A[m_mat.diag[i]] / v;
#elif 0
- // works halfway, i.e. Mame perforamnce 50%
+ // works halfway, i.e. Mame performance 50%
// 151%
for (std::size_t j = m_mat.row_idx[i]; j< m_mat.row_idx[i+1]; j++)
v += plib::abs(m_mat.A[j]);
@@ -175,10 +174,9 @@ namespace plib
template <typename FT, int SIZE>
struct mat_precondition_none
{
- mat_precondition_none(std::size_t size, int dummy = 0)
+ mat_precondition_none(std::size_t size, [[maybe_unused]] int dummy = 0)
: m_mat(size)
{
- plib::unused_var(dummy);
}
template <typename M>
@@ -198,9 +196,8 @@ namespace plib
}
template<typename V>
- void solve_inplace(V &v)
+ void solve_inplace([[maybe_unused]] V &v)
{
- plib::unused_var(v);
}
plib::pmatrix_cr<FT, SIZE> m_mat;
@@ -344,9 +341,8 @@ namespace plib
}
template <int k, typename OPS, typename VT>
- bool do_k(OPS &ops, VT &x, std::size_t &itr_used, FT rho_delta, bool dummy)
+ bool do_k(OPS &ops, VT &x, std::size_t &itr_used, FT rho_delta, [[maybe_unused]] bool dummy)
{
- plib::unused_var(dummy);
if (do_k<k-1, OPS>(ops, x, itr_used, rho_delta, do_khelper<k-1>::value))
return true;
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h
index 6c197aa9238..f565e02d7b6 100644
--- a/src/lib/netlist/plib/palloc.h
+++ b/src/lib/netlist/plib/palloc.h
@@ -90,15 +90,17 @@ namespace plib {
{
using arena_storage_type = P;
- constexpr arena_deleter_base(arena_storage_type *a = nullptr) noexcept
+ constexpr arena_deleter_base( /*[[maybe_unused]]*/ arena_storage_type *a = nullptr) noexcept
{
+ // gcc 7.2 (mingw) and 7.5 (ubuntu) don't accept maybe_unused here
plib::unused_var(a);
}
template<typename U, typename = typename
std::enable_if<std::is_convertible< U*, T*>::value>::type>
- arena_deleter_base(const arena_deleter_base<P, U, true> &rhs) noexcept
+ arena_deleter_base( /*[[maybe_unused]]*/ const arena_deleter_base<P, U, true> &rhs) noexcept
{
+ // gcc 7.2 (mingw) and 7.5 (ubuntu) don't accept maybe_unused here
plib::unused_var(rhs);
}
@@ -454,9 +456,8 @@ namespace plib {
#endif
}
- bool operator ==(const aligned_arena &rhs) const noexcept
+ bool operator ==([[maybe_unused]] const aligned_arena &rhs) const noexcept
{
- plib::unused_var(rhs);
return true;
}
@@ -464,10 +465,9 @@ namespace plib {
struct std_arena : public arena_base<std_arena, true, true>
{
- static inline void *allocate( size_t alignment, size_t size )
+ static inline void *allocate([[maybe_unused]] size_t alignment, size_t size )
{
inc_alloc_stat(size);
- unused_var(alignment);
return ::operator new(size);
}
@@ -477,9 +477,8 @@ namespace plib {
::operator delete(ptr);
}
- bool operator ==(const aligned_arena &rhs) const noexcept
+ bool operator ==([[maybe_unused]] const aligned_arena &rhs) const noexcept
{
- plib::unused_var(rhs);
return true;
}
};
@@ -636,9 +635,8 @@ namespace plib {
~paged_arena() = default;
- static void *allocate(size_t align, size_t size)
+ static void *allocate([[maybe_unused]] size_t align, size_t size)
{
- plib::unused_var(align);
//size = ((size + PG_SIZE - 1) / PG_SIZE) * PG_SIZE;
return arena().allocate(PG_SIZE, size);
}
diff --git a/src/lib/netlist/plib/pchrono.h b/src/lib/netlist/plib/pchrono.h
index be391502946..629d7573239 100644
--- a/src/lib/netlist/plib/pchrono.h
+++ b/src/lib/netlist/plib/pchrono.h
@@ -110,7 +110,7 @@ namespace plib {
#if PUSE_ACCURATE_STATS && PHAS_RDTSCP
//
// kills performance completely, but is accurate
- // cpuid serializes, but clobbers ebx and ecx
+ // `cpuid` serializes, but clobbers ebx and ecx
//
struct exact_ticks : public base_ticks<exact_ticks, int64_t>
diff --git a/src/lib/netlist/plib/pconfig.h b/src/lib/netlist/plib/pconfig.h
index be56ad86507..d0dded12358 100644
--- a/src/lib/netlist/plib/pconfig.h
+++ b/src/lib/netlist/plib/pconfig.h
@@ -83,8 +83,8 @@
#define PALIGNAS_VECTOROPT()
#endif
-// FIXME: Breaks mame build on windows mingw due to -Wattribute
-// also triggers -Wattribute on ARM
+// FIXME: Breaks mame build on windows mingw due to `-Wattribute`
+// also triggers `-Wattribute` on ARM
// This is fixed on mingw version 10
// FIXME: no error on cross-compile - need further checks
#if defined(__GNUC__) && ((defined(_WIN32) && __GNUC__ < 10) || defined(__arm__) || defined(__ARMEL__))
@@ -115,30 +115,16 @@
//
//============================================================
-#if (NVCCBUILD > 0)
- #if NVCCBUILD >= 101
- #define NVCC_CONSTEXPR constexpr
- #else
- #define NVCC_CONSTEXPR constexpr
- #endif
- #if NVCCBUILD < 113
- #if __cplusplus != 201402L
- #error nvcc - use c++14 to compile
- #endif
- #endif
+#if defined(_MSC_VER)
+ // Ok
+#elif __cplusplus == 201103L
+ #error c++11 not supported - you need c++17
+#elif __cplusplus == 201402L
+ #error c++14 not supported - you need c++17
+#elif __cplusplus == 201703L
+ // Ok
#else
- #define NVCC_CONSTEXPR constexpr
- #if __cplusplus == 201103L
- #error c++11 not supported - you need c++14
- #elif __cplusplus == 201402L
- // Ok
- #elif __cplusplus == 201703L
- // Ok
- #elif defined(_MSC_VER)
- // Ok
- #else
- #error "C++ version not supported"
- #endif
+ #error "C++ version not supported"
#endif
diff --git a/src/lib/netlist/plib/pdynlib.cpp b/src/lib/netlist/plib/pdynlib.cpp
index 7e9ea3ea73f..52fc5effb96 100644
--- a/src/lib/netlist/plib/pdynlib.cpp
+++ b/src/lib/netlist/plib/pdynlib.cpp
@@ -40,11 +40,10 @@ dynlib::dynlib(const pstring &libname)
// printf("library <%s> not found: %s\n", libname.c_str(), dlerror());
}
-dynlib::dynlib(const pstring &path, const pstring &libname)
+dynlib::dynlib( [[maybe_unused]] const pstring &path, const pstring &libname)
: m_lib(nullptr)
{
// FIXME: implement path search
- plib::unused_var(path);
// printf("win: loading <%s>\n", libname.c_str());
#ifdef _WIN32
if (!libname.empty())
diff --git a/src/lib/netlist/plib/pdynlib.h b/src/lib/netlist/plib/pdynlib.h
index 04a6a354a69..4e8ce023d6f 100644
--- a/src/lib/netlist/plib/pdynlib.h
+++ b/src/lib/netlist/plib/pdynlib.h
@@ -7,14 +7,13 @@
///
/// \file pdynlib.h
///
+/// Dynamic loading of libraries
+///
#include "pstring.h"
#include "ptypes.h"
namespace plib {
- // ----------------------------------------------------------------------------------------
- // pdynlib: dynamic loading of libraries ...
- // ----------------------------------------------------------------------------------------
class dynlib_base
{
@@ -46,7 +45,7 @@ namespace plib {
{
public:
explicit dynlib(const pstring &libname);
- dynlib(const pstring &path, const pstring &libname);
+ dynlib(/*[[maybe_unused]]*/ const pstring &path, const pstring &libname);
~dynlib() override;
diff --git a/src/lib/netlist/plib/pexception.cpp b/src/lib/netlist/plib/pexception.cpp
index 86e7e732b45..bd2d81847a6 100644
--- a/src/lib/netlist/plib/pexception.cpp
+++ b/src/lib/netlist/plib/pexception.cpp
@@ -104,7 +104,7 @@ namespace plib {
bool fpsignalenabler::m_enable = false; // NOLINT
- //FIXME: mingw needs to be compiled with "-fnon-call-exceptions"
+ //FIXME: mingw needs to be compiled with `-fnon-call-exceptions`
fpsignalenabler::fpsignalenabler(unsigned fpexceptions)
{
diff --git a/src/lib/netlist/plib/pexception.h b/src/lib/netlist/plib/pexception.h
index d07122b7ebb..3b896f2b3dd 100644
--- a/src/lib/netlist/plib/pexception.h
+++ b/src/lib/netlist/plib/pexception.h
@@ -83,7 +83,7 @@ namespace plib {
};
// FIXME: currently only a stub for later use. More use could be added by
- // using “-fnon-call-exceptions" and sigaction to enable c++ exception supported.
+ // using `-fnon-call-exceptions` and sigaction to enable c++ exception supported.
//
class fpexception_e : public pexception
diff --git a/src/lib/netlist/plib/pmath.h b/src/lib/netlist/plib/pmath.h
index d28090079e3..311a928a597 100644
--- a/src/lib/netlist/plib/pmath.h
+++ b/src/lib/netlist/plib/pmath.h
@@ -15,7 +15,7 @@
#include <cmath>
#include <type_traits>
-// quadmath.h included by ptypes.h
+// `quadmath.h` included by `ptypes.h`
namespace plib
{
diff --git a/src/lib/netlist/plib/pomp.h b/src/lib/netlist/plib/pomp.h
index 27b4cc74c2a..d698d6ea34f 100644
--- a/src/lib/netlist/plib/pomp.h
+++ b/src/lib/netlist/plib/pomp.h
@@ -55,12 +55,10 @@ void for_static_np(const I start, const I end, const T &what) noexcept(noexcept(
}
-inline void set_num_threads(const std::size_t threads) noexcept
+inline void set_num_threads([[maybe_unused]] const std::size_t threads) noexcept
{
#if PHAS_OPENMP && PUSE_OPENMP
omp_set_num_threads(threads);
-#else
- plib::unused_var(threads);
#endif
}
diff --git a/src/lib/netlist/plib/poptions.cpp b/src/lib/netlist/plib/poptions.cpp
index 5b4b2228df1..b7e0b595114 100644
--- a/src/lib/netlist/plib/poptions.cpp
+++ b/src/lib/netlist/plib/poptions.cpp
@@ -26,9 +26,8 @@ namespace plib {
return 0;
}
- int option_bool::parse(const pstring &argument)
+ int option_bool::parse([[maybe_unused]] const pstring &argument)
{
- unused_var(argument);
m_val = true;
return 0;
}
diff --git a/src/lib/netlist/plib/ppmf.cpp b/src/lib/netlist/plib/ppmf.cpp
index 8100b94ade0..05493f98d2f 100644
--- a/src/lib/netlist/plib/ppmf.cpp
+++ b/src/lib/netlist/plib/ppmf.cpp
@@ -15,7 +15,7 @@
namespace plib {
- void mfp_raw<PPMF_TYPE_INTERNAL_ITANIUM>::convert_to_generic(generic_function &func, mfp_generic_class *&object) const
+ void mfp_raw<ppmf_type::INTERNAL_ITANIUM>::convert_to_generic(generic_function &func, mfp_generic_class *&object) const
{
// apply the "this" delta to the object first
// NOLINTNEXTLINE(clang-analyzer-core.UndefinedBinaryOperatorResult,cppcoreguidelines-pro-type-reinterpret-cast)
@@ -42,7 +42,7 @@ namespace plib {
object = o_p_delta;
}
- void mfp_raw<PPMF_TYPE_INTERNAL_ARM>::convert_to_generic(generic_function &func, mfp_generic_class *&object) const
+ void mfp_raw<ppmf_type::INTERNAL_ARM>::convert_to_generic(generic_function &func, mfp_generic_class *&object) const
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
object = reinterpret_cast<mfp_generic_class *>(reinterpret_cast<std::uint8_t *>(object) + (m_this_delta >> 1));
@@ -64,9 +64,9 @@ namespace plib {
}
}
- struct unknown_base_equiv_novtdisp { mfp_raw<PPMF_TYPE_INTERNAL_MSC>::generic_function fptr; int thisdisp, vptrdisp; };
+ struct unknown_base_equiv_novtdisp { mfp_raw<ppmf_type::INTERNAL_MSC>::generic_function fptr; int thisdisp, vptrdisp; };
- void mfp_raw<PPMF_TYPE_INTERNAL_MSC>::convert_to_generic(generic_function &func, mfp_generic_class *&object) const
+ void mfp_raw<ppmf_type::INTERNAL_MSC>::convert_to_generic(generic_function &func, mfp_generic_class *&object) const
{
//printf("%lx, %lx, %lx, %lx %lx\n", m_function, m_this_delta, m_vptr_offs, m_vt_index, m_size);
diff --git a/src/lib/netlist/plib/ppmf.h b/src/lib/netlist/plib/ppmf.h
index 31818f9f12c..b188ca0cd81 100644
--- a/src/lib/netlist/plib/ppmf.h
+++ b/src/lib/netlist/plib/ppmf.h
@@ -20,7 +20,7 @@
/// Use the same approach as MAME for deriving the function pointer.
/// This is compiler-dependent as well
///
-/// Benchmarks for ./nltool -c run -t 10 -n pongf src/mame/machine/nl_pongf.cpp
+/// Benchmarks for `./nltool -c run -t 10 -n pongf src/mame/machine/nl_pongf.cpp`
///
/// PMF_TYPE_INTERNAL: 215% 215% 564% 580%
/// PMF_TYPE_GNUC_PMF: 163% 196% 516% 490%
@@ -31,7 +31,7 @@
/// \brief Enable experimental code on Visual Studio builds and VS clang llvm builds
///
/// This enables experimental code which uses optimized builds the
-/// PPMF_TYPE_INTERNAL_MSC path also for complex (struct/union) return types.
+/// ppmf_type::INTERNAL_MSC path also for complex (struct/union) return types.
/// This currently depends on whether the code can adequately determine on
/// x64 builds if the return type is returned through registers or passed as a
/// second argument as a pointer to the member function.
@@ -46,7 +46,9 @@
///
/// This code path is disabled by default currently.
///
+#if !defined(PPMF_EXPERIMENTAL)
#define PPMF_EXPERIMENTAL 0
+#endif
/// brief Enable using MAME delegates as a replacement for ppmf.
///
@@ -54,7 +56,9 @@
/// as a replacement to ppmf. Enable this setting if you want to use the nltool
/// test suite (nltool -c tests) to produce comparisons to ppmf.
///
+#if !defined(PPMF_USE_MAME_DELEGATES)
#define PPMF_USE_MAME_DELEGATES 0
+#endif
#if PPMF_USE_MAME_DELEGATES
@@ -87,39 +91,43 @@ namespace plib {
//#define PPMF_FORCE_TYPE 0
-#define PPMF_TYPE_PMF 0
-#define PPMF_TYPE_GNUC_PMF_CONV 1
-#define PPMF_TYPE_INTERNAL_ITANIUM 2
-#define PPMF_TYPE_INTERNAL_ARM 3
-#define PPMF_TYPE_INTERNAL_MSC 4
-
#ifndef PPMF_FORCE_TYPE
#define PPMF_FORCE_TYPE -1
#endif
namespace plib {
- struct ppmf_internal
+ enum class ppmf_type
+ {
+ PMF,
+ GNUC_PMF_CONV,
+ INTERNAL_ITANIUM,
+ INTERNAL_ARM,
+ INTERNAL_MSC
+ };
+
+
+ struct ppmf_internal_selector
{
using ci = compile_info;
- enum { value =
- (PPMF_FORCE_TYPE >= 0) ? PPMF_FORCE_TYPE :
+ constexpr static ppmf_type value =
+ (PPMF_FORCE_TYPE >= 0) ? static_cast<ppmf_type>(PPMF_FORCE_TYPE) :
(ci::type() == ci_compiler::CLANG && !ci::m64()
- && ci::os() == ci_os::WINDOWS) ? PPMF_TYPE_PMF :
- (ci::mingw() && !ci::m64() && ci::version() >= 407) ? PPMF_TYPE_PMF :
- (ci::mingw() && !ci::m64()) ? PPMF_TYPE_PMF : // Dropped support for mingw32 < 407 PPMF_TYPE_INTERNAL_ITANIUM :
- (ci::env() == ci_env::MSVC && ci::m64()) ? PPMF_TYPE_INTERNAL_MSC :
+ && ci::os() == ci_os::WINDOWS) ? ppmf_type::PMF :
+ (ci::mingw() && !ci::m64() && ci::version::full() >= typed_version<4,7>::full()) ? ppmf_type::PMF :
+ (ci::mingw() && !ci::m64()) ? ppmf_type::PMF : // Dropped support for mingw32 < 407 ppmf_type::INTERNAL_ITANIUM :
+ (ci::env() == ci_env::MSVC && ci::m64()) ? ppmf_type::INTERNAL_MSC :
((ci::type() == ci_compiler::CLANG || ci::type() == ci_compiler::GCC)
&& (ci::arch() == ci_arch::MIPS
|| ci::arch() == ci_arch::ARM
- || ci::os() == ci_os::EMSCRIPTEN)) ? PPMF_TYPE_INTERNAL_ARM :
- (ci::type() == ci_compiler::CLANG || ci::type() == ci_compiler::GCC) ? PPMF_TYPE_INTERNAL_ITANIUM :
- PPMF_TYPE_PMF
- };
+ || ci::os() == ci_os::EMSCRIPTEN)) ? ppmf_type::INTERNAL_ARM :
+ (ci::type() == ci_compiler::CLANG || ci::type() == ci_compiler::GCC) ? ppmf_type::INTERNAL_ITANIUM :
+ ppmf_type::PMF
+ ;
};
- static_assert(!(compile_info::type() == ci_compiler::CLANG && (PPMF_FORCE_TYPE) == (PPMF_TYPE_GNUC_PMF_CONV)), "clang does not support PPMF_TYPE_GNUC_PMF_CONV");
- static_assert(!(compile_info::type() == ci_compiler::NVCC && (PPMF_FORCE_TYPE) == (PPMF_TYPE_GNUC_PMF_CONV)), "nvcc does not support PPMF_TYPE_GNUC_PMF_CONV");
+ static_assert(!(compile_info::type() == ci_compiler::CLANG && ppmf_internal_selector::value == (ppmf_type::GNUC_PMF_CONV)), "clang does not support ppmf_type::GNUC_PMF_CONV");
+ static_assert(!(compile_info::env() == ci_env::NVCC && ppmf_internal_selector::value == (ppmf_type::GNUC_PMF_CONV)), "nvcc does not support ppmf_type::GNUC_PMF_CONV");
template<typename R, typename... Targs>
struct mfp_traits
@@ -138,11 +146,11 @@ namespace plib {
///
/// The following class was derived from the MAME delegate.h code.
///
- template <int PMFINTERNAL>
+ template <ppmf_type PMFINTERNAL>
class mfp_raw;
template <>
- class mfp_raw<PPMF_TYPE_INTERNAL_ITANIUM>
+ class mfp_raw<ppmf_type::INTERNAL_ITANIUM>
{
public:
// construct from any member function pointer
@@ -156,14 +164,14 @@ namespace plib {
// actual state
uintptr_t m_function; // first item can be one of two things:
- // if even, it's a pointer to the function
- // if odd, it's the byte offset into the vtable
- // or a byte offset into the function descriptors on IA64
+ // if even, it's a pointer to the function
+ // if odd, it's the byte offset into the vtable
+ // or a byte offset into the function descriptors on IA64
ptrdiff_t m_this_delta; // delta to apply to the 'this' pointer
};
template <>
- class mfp_raw<PPMF_TYPE_INTERNAL_ARM>
+ class mfp_raw<ppmf_type::INTERNAL_ARM>
{
public:
// construct from any member function pointer
@@ -178,12 +186,12 @@ namespace plib {
// actual state
uintptr_t m_function; // first item can pointer to the function or a byte offset into the vtable
ptrdiff_t m_this_delta; // delta to apply to the 'this' pointer after right shifting by one bit
- // m_function is the byte offset into the vtable
- // On IA64 it may also be a byte offset into the function descriptors
+ // m_function is the byte offset into the vtable
+ // On IA64 it may also be a byte offset into the function descriptors
};
template <>
- class mfp_raw<PPMF_TYPE_INTERNAL_MSC>
+ class mfp_raw<ppmf_type::INTERNAL_MSC>
{
public:
// construct from any member function pointer
@@ -214,11 +222,11 @@ namespace plib {
std::is_same_v<std::remove_cv_t<R>, compile_info::int128_type> ||
std::is_same_v<std::remove_cv_t<R>, compile_info::uint128_type> >;
- template<int PMFINTERNAL, typename R, typename... Targs>
+ template<ppmf_type PMFINTERNAL, typename R, typename... Targs>
struct mfp_helper
{
protected:
- static_assert(PMFINTERNAL >= PPMF_TYPE_INTERNAL_ITANIUM && PMFINTERNAL <= PPMF_TYPE_INTERNAL_MSC, "Invalid PMF type");
+ static_assert(PMFINTERNAL >= ppmf_type::INTERNAL_ITANIUM && PMFINTERNAL <= ppmf_type::INTERNAL_MSC, "Invalid PMF type");
using traits = mfp_traits<R, Targs...>;
using generic_member_function = typename traits::template specific_member_function<mfp_generic_class>;
@@ -262,7 +270,7 @@ namespace plib {
};
template<typename R, typename... Targs>
- struct mfp_helper<PPMF_TYPE_PMF, R, Targs...>
+ struct mfp_helper<ppmf_type::PMF, R, Targs...>
{
protected:
using traits = mfp_traits<R, Targs...>;
@@ -292,9 +300,9 @@ namespace plib {
static R stub(const generic_member_function* funci, mfp_generic_class* obji, Targs&&... args) noexcept(true);
};
-#if NVCCBUILD == 0
+#if !defined(__NVCC__)
template<typename R, typename... Targs>
- struct mfp_helper<PPMF_TYPE_GNUC_PMF_CONV, R, Targs...>
+ struct mfp_helper<ppmf_type::GNUC_PMF_CONV, R, Targs...>
{
protected:
using traits = mfp_traits<R, Targs...>;
@@ -319,15 +327,15 @@ namespace plib {
};
#endif
- template <int PMFINTERNAL, typename R, typename... Targs>
+ template <ppmf_type PMFINTERNAL, typename R, typename... Targs>
using pmfp_helper_select = std::conditional<
pmf_is_register_return_type<R>::value
- || PMFINTERNAL != PPMF_TYPE_INTERNAL_MSC || (PPMF_EXPERIMENTAL),
- mfp_helper<PMFINTERNAL, R, Targs...>, mfp_helper<PPMF_TYPE_PMF, R, Targs...>>;
+ || PMFINTERNAL != ppmf_type::INTERNAL_MSC || (PPMF_EXPERIMENTAL),
+ mfp_helper<PMFINTERNAL, R, Targs...>, mfp_helper<ppmf_type::PMF, R, Targs...>>;
- template<int PMFINTERNAL, typename SIGNATURE> class pmfp_base;
+ template<ppmf_type PMFINTERNAL, typename SIGNATURE> class pmfp_base;
- template<int PMFINTERNAL, typename R, typename... Targs>
+ template<ppmf_type PMFINTERNAL, typename R, typename... Targs>
class pmfp_base<PMFINTERNAL, R (Targs...)> : public pmfp_helper_select<PMFINTERNAL, R, Targs...>::type
{
public:
@@ -377,7 +385,7 @@ namespace plib {
};
template<typename Signature>
- using pmfp = pmfp_base<ppmf_internal::value, Signature>;
+ using pmfp = pmfp_base<ppmf_internal_selector::value, Signature>;
///
/// \brief Class to support delegate late binding
@@ -424,7 +432,7 @@ namespace plib {
};
template<typename MemberFunctionType>
- mfp_raw<PPMF_TYPE_INTERNAL_ITANIUM>::mfp_raw(MemberFunctionType mftp)
+ mfp_raw<ppmf_type::INTERNAL_ITANIUM>::mfp_raw(MemberFunctionType mftp)
: m_function(0), m_this_delta(0)
{
static_assert(sizeof(*this) >= sizeof(MemberFunctionType), "size mismatch");
@@ -433,7 +441,7 @@ namespace plib {
}
template<typename MemberFunctionType>
- mfp_raw<PPMF_TYPE_INTERNAL_ARM>::mfp_raw(MemberFunctionType mftp)
+ mfp_raw<ppmf_type::INTERNAL_ARM>::mfp_raw(MemberFunctionType mftp)
: m_function(0), m_this_delta(0)
{
static_assert(sizeof(*this) >= sizeof(MemberFunctionType), "size mismatch");
@@ -441,7 +449,7 @@ namespace plib {
}
template<typename MemberFunctionType>
- mfp_raw<PPMF_TYPE_INTERNAL_MSC>::mfp_raw(MemberFunctionType mftp)
+ mfp_raw<ppmf_type::INTERNAL_MSC>::mfp_raw(MemberFunctionType mftp)
: m_function(0), m_this_delta(0), m_vptr_index(0), m_vt_index(0), m_size(0)
{
static_assert(sizeof(*this) >= sizeof(MemberFunctionType), "size mismatch");
@@ -449,7 +457,7 @@ namespace plib {
m_size = sizeof(mftp); //NOLINT
}
- template<int PMFINTERNAL, typename R, typename... Targs>
+ template<ppmf_type PMFINTERNAL, typename R, typename... Targs>
mfp_helper<PMFINTERNAL, R, Targs...>::mfp_helper()
: m_obj(nullptr)
{
@@ -458,7 +466,7 @@ namespace plib {
std::fill(s, s + sizeof(m_resolved), 0);
}
- template<int PMFINTERNAL, typename R, typename... Targs>
+ template<ppmf_type PMFINTERNAL, typename R, typename... Targs>
template<typename O, typename F>
void mfp_helper<PMFINTERNAL, R, Targs...>::bind(O *object, F *mftp)
{
@@ -478,7 +486,7 @@ namespace plib {
}
template<typename R, typename... Targs>
- mfp_helper<PPMF_TYPE_PMF, R, Targs...>::mfp_helper()
+ mfp_helper<ppmf_type::PMF, R, Targs...>::mfp_helper()
: m_obj(nullptr)
, m_stub(nullptr)
{
@@ -489,7 +497,7 @@ namespace plib {
template<typename R, typename... Targs>
template<typename O, typename F>
- void mfp_helper<PPMF_TYPE_PMF, R, Targs...>::bind(O *object, F *mftp)
+ void mfp_helper<ppmf_type::PMF, R, Targs...>::bind(O *object, F *mftp)
{
reinterpret_copy(*mftp, this->m_resolved);
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
@@ -499,7 +507,7 @@ namespace plib {
template<typename R, typename... Targs>
template<typename O>
- R mfp_helper<PPMF_TYPE_PMF, R, Targs...>::stub(const generic_member_function* funci, mfp_generic_class* obji, Targs&&... args) noexcept(true)
+ R mfp_helper<ppmf_type::PMF, R, Targs...>::stub(const generic_member_function* funci, mfp_generic_class* obji, Targs&&... args) noexcept(true)
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
auto* obj = reinterpret_cast<O*>(obji);
@@ -508,9 +516,9 @@ namespace plib {
return (obj->*(*func))(std::forward<Targs>(args)...);
}
-#if NVCCBUILD == 0
+#if !defined(__NVCC__)
template<typename R, typename... Targs>
- mfp_helper<PPMF_TYPE_GNUC_PMF_CONV, R, Targs...>::mfp_helper()
+ mfp_helper<ppmf_type::GNUC_PMF_CONV, R, Targs...>::mfp_helper()
: m_obj(nullptr)
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
@@ -520,7 +528,7 @@ namespace plib {
template<typename R, typename... Targs>
template<typename O, typename F>
- void mfp_helper<PPMF_TYPE_GNUC_PMF_CONV, R, Targs...>::bind(O *object, F *mftp)
+ void mfp_helper<ppmf_type::GNUC_PMF_CONV, R, Targs...>::bind(O *object, F *mftp)
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
member_abi_function<O> t = reinterpret_cast<member_abi_function<O>>(object->*(*mftp));
diff --git a/src/lib/netlist/plib/ppreprocessor.h b/src/lib/netlist/plib/ppreprocessor.h
index 8fd8db1ac44..1e21e72a5b0 100644
--- a/src/lib/netlist/plib/ppreprocessor.h
+++ b/src/lib/netlist/plib/ppreprocessor.h
@@ -52,8 +52,8 @@ namespace plib {
///
/// \param filename a filename or identifier identifying the stream.
///
- /// FIXME: this is sub-optimal. Refactor input_context into pinput_context
- /// and pass this to ppreprocessor.
+ /// FIXME: this is sub-optimal. Refactor input_context into `pinput`_context
+ /// and pass this to `ppreprocessor`.
///
template <typename T>
pstring process(T &&istrm, const pstring &filename)
diff --git a/src/lib/netlist/plib/prandom.h b/src/lib/netlist/plib/prandom.h
index 03e066f94cd..062e0507705 100644
--- a/src/lib/netlist/plib/prandom.h
+++ b/src/lib/netlist/plib/prandom.h
@@ -145,9 +145,8 @@ namespace plib
}
template <typename ST>
- void save_state(ST &st)
+ void save_state([[maybe_unused]] ST &st)
{
- plib::unused_var(st);
/* no state to save */
}
diff --git a/src/lib/netlist/plib/pstonum.h b/src/lib/netlist/plib/pstonum.h
index 7b3492c29d0..18c67ca2b86 100644
--- a/src/lib/netlist/plib/pstonum.h
+++ b/src/lib/netlist/plib/pstonum.h
@@ -85,7 +85,7 @@ namespace plib
template<>
struct pstonum_helper<FLOAT128>
{
- // FIXME: use strtoflt128 from quadmath.h
+ // FIXME: use `strtoflt128` from `quadmath.h`
template <typename S>
FLOAT128 operator()(std::locale loc, const S &arg, bool *err)
{
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h
index 0d1545e58b3..30c9f2b5c08 100644
--- a/src/lib/netlist/plib/pstream.h
+++ b/src/lib/netlist/plib/pstream.h
@@ -16,7 +16,6 @@
#include <array>
#include <fstream>
-#include <fstream>
#include <ios>
#include <iostream>
#include <memory>
@@ -26,7 +25,7 @@
namespace plib {
- /// \brief wrapper around isteam read
+ /// \brief wrapper around istream read
///
template <typename S, typename T>
static S & istream_read(S &is, T * data, size_t len)
@@ -37,7 +36,7 @@ namespace plib {
return is.read(reinterpret_cast<ct *>(data), gsl::narrow<std::streamsize>(len * sizeof(T)));
}
- /// \brief wrapper around osteam write
+ /// \brief wrapper around ostream write
///
template <typename S, typename T>
static S & ostream_write(S &os, const T * data, size_t len)
@@ -366,7 +365,7 @@ class ifstream : public std::ifstream
{
public:
- using filename_type = std::conditional<compile_info::win32() && (!compile_info::mingw() || compile_info::version()>=900),
+ using filename_type = std::conditional<compile_info::win32() && (!compile_info::mingw() || compile_info::version::vmajor()>=9),
pstring_t<pwchar_traits>, pstring_t<putf8_traits>>::type;
template <typename T>
@@ -387,7 +386,7 @@ public:
class ofstream : public std::ofstream
{
public:
- using filename_type = std::conditional<compile_info::win32() && (!compile_info::mingw() || compile_info::version()>=900),
+ using filename_type = std::conditional<compile_info::win32() && (!compile_info::mingw() || compile_info::version::vmajor()>=9),
pstring_t<pwchar_traits>, pstring_t<putf8_traits>>::type;
template <typename T>
diff --git a/src/lib/netlist/plib/ptests.h b/src/lib/netlist/plib/ptests.h
index 1aac62997f4..856cbacf735 100644
--- a/src/lib/netlist/plib/ptests.h
+++ b/src/lib/netlist/plib/ptests.h
@@ -15,6 +15,8 @@
#include <iostream>
#include <string>
#include <vector>
+#include <algorithm>
+#include <sstream>
#if defined(__clang__)
#pragma clang diagnostic ignored "-Wglobal-constructors"
@@ -35,43 +37,80 @@
#define PTEST(name, desc) PINT_TEST(name, desc)
#define PTEST_F(name, desc) PINT_TEST_F(name, desc, name)
-#define PRUN_ALL_TESTS() plib::testing::run_all_tests()
+#define PRUN_ALL_TESTS(loglevel) plib::testing::run_all_tests(loglevel)
#define PINT_TEST(name, desc) PINT_TEST_F(name, desc, plib::testing::Test)
+#define PINT_TESTNAME(name, desc) name ## _ ## desc
+#define PINT_LOCATION() ::plib::testing::test_location(__FILE__, __LINE__)
+#define PINT_SET_LAST(loc) this->m_parameters->m_last_source = loc
+
+#define PINT_REGISTER(name, desc) \
+ extern const plib::testing::reg_entry<PINT_TESTNAME(name, desc)> PINT_TESTNAME(name, desc ## _reg); \
+ const plib::testing::reg_entry<PINT_TESTNAME(name, desc)> PINT_TESTNAME(name, desc ## _reg)(#name, #desc, PINT_LOCATION()); \
+
#define PINT_TEST_F(name, desc, base) \
- class name ## _ ## desc : public base \
+ class PINT_TESTNAME(name, desc) : public base \
{ public:\
void desc (); \
void run() override { desc (); } \
}; \
- extern const plib::testing::reg_entry<name ## _ ## desc> name ## _ ## desc ## _reg; \
- const plib::testing::reg_entry<name ## _ ## desc> name ## _ ## desc ## _reg(#name, #desc); \
- void name ## _ ## desc :: desc ()
+ PINT_REGISTER(name, desc) \
+ void PINT_TESTNAME(name, desc) :: desc ()
#define PINT_EXPECT(comp, exp1, exp2) \
- if (!plib::testing::internal_assert(plib::testing::comp_ ## comp (), # exp1, # exp2, exp1, exp2)) \
- std::cout << __FILE__ << ":" << __LINE__ << ":1: error: test failed\n"
+ if (true) \
+ { \
+ ::plib::testing::test_location source = PINT_LOCATION(); PINT_SET_LAST(source); \
+ m_parameters->m_num_tests++; \
+ if (!this->internal_assert(plib::testing::comp_ ## comp (), # exp1, # exp2, exp1, exp2)) \
+ this->test_error(source) << "test failed" << std::endl; \
+ } else do {} while (0)
#define PINT_EXPECT_THROW(exp, excep) \
- if (const char *ptest_f = __FILE__) \
+ if (true) \
{ \
- try { exp; std::cout << ptest_f << ":" << __LINE__ << ":1: error: no " #excep " exception thrown\n";} \
- catch (excep &) { std::cout << "\tOK: got " #excep " for " # exp "\n";} \
- catch (std::exception &ptest_e) { std::cout << ptest_f << ":" << __LINE__ << ":1: error: unexpected exception thrown: " << ptest_e.what() << "\n"; } \
- catch (...) { std::cout << ptest_f << ":" << __LINE__ << ":1: error: unexpected exception thrown\n"; } \
+ ::plib::testing::test_location source = PINT_LOCATION(); PINT_SET_LAST(source); \
+ m_parameters->m_num_tests++; \
+ try { exp; this->test_error(source) << "no " #excep " exception thrown" << std::endl;} \
+ catch (excep &) { this->test_ok() << "got " #excep " for " # exp "" << std::endl;} \
+ catch (std::exception &ptest_e) { this->test_error(source) << "unexpected exception thrown: " << ptest_e.what() << std::endl; } \
+ catch (...) { this->test_error(source) << "unexpected exception thrown" << std::endl; } \
} else do {} while (0)
#define PINT_EXPECT_NO_THROW(exp) \
- if (const char *ptest_f = __FILE__) \
+ if (true) \
{ \
- try { exp; std::cout << "\tOK: got no exception for " # exp "\n";} \
- catch (std::exception &ptest_e) { std::cout << ptest_f << ":" << __LINE__ << ":1: error: unexpected exception thrown: " << ptest_e.what() << "\n"; } \
- catch (...) { std::cout << ptest_f << ":" << __LINE__ << ":1: error: unexpected exception thrown\n"; } \
+ ::plib::testing::test_location source = PINT_LOCATION(); PINT_SET_LAST(source); \
+ m_parameters->m_num_tests++; \
+ try { exp; this->test_ok() << "got no exception for " # exp << std::endl;} \
+ catch (std::exception &ptest_e) { this->test_error(source) << "unexpected exception thrown: " << ptest_e.what() << std::endl; } \
+ catch (...) { this->test_error(source) << "unexpected exception thrown" << std::endl; } \
} else do {} while (0)
namespace plib::testing
{
+ enum class loglevel
+ {
+ INFO,
+ WARNING,
+ ERROR
+ };
+
+ using test_location = std::pair<const char *, std::size_t>;
+
+ struct test_parameters
+ {
+ loglevel m_loglevel = loglevel::INFO;
+ std::size_t m_num_errors = 0;
+ std::size_t m_num_tests = 0;
+ test_location m_last_source = {"", 0 };
+ };
+
+ static std::ostream &stream_error(std::ostream &os, test_location loc)
+ {
+ return os << loc.first << ":" << loc.second << ":1: error: ";
+ }
class Test
{
@@ -87,13 +126,54 @@ namespace plib::testing
virtual void run() {}
virtual void SetUp() {}
virtual void TearDown() {}
+
+ void set_parameters(test_parameters *params)
+ {
+ m_parameters = params;
+ }
+ protected:
+ std::ostream & test_ok() { return output(loglevel::INFO) << "\tOK: "; }
+ std::ostream & test_fail() { return output(loglevel::WARNING) << "\tFAIL: "; }
+ std::ostream & test_error(const test_location & loc)
+ {
+ return stream_error(output(loglevel::ERROR), loc);
+ }
+
+ template <typename C, typename T1, typename T2>
+ bool internal_assert(C comp,
+ const char* exp1, const char* exp2,
+ const T1& val1, const T2& val2);
+ test_parameters *m_parameters = nullptr;
+ private:
+ std::ostream &output(loglevel ll)
+ {
+ if (ll == loglevel::ERROR)
+ m_parameters->m_num_errors++;
+ return (ll >= m_parameters->m_loglevel) ? std::cout : m_nulstream;
+ }
+ std::ostringstream m_nulstream;
};
+ template <typename C, typename T1, typename T2>
+ bool Test::internal_assert(C comp,
+ const char* exp1, const char* exp2,
+ const T1& val1, const T2& val2)
+ {
+ if (comp(val1, val2))
+ {
+ test_ok() << exp1 << " " << C::opstr() << " " << exp2 << std::endl;
+ return true;
+ }
+ test_fail() << exp1 << " " << C::opstr() << " " << exp2
+ << " <" << val1 << ">,<" << val2 << ">" << std::endl;
+ return false;
+ }
+
struct reg_entry_base
{
using list_t = std::vector<reg_entry_base *>;
- reg_entry_base(const std::string &n, const std::string &d)
- : name(n), desc(d)
+ reg_entry_base(const char *n, const char *d, test_location l)
+ : name(n), desc(d), location(l)
{
registry().push_back(this);
}
@@ -107,8 +187,9 @@ namespace plib::testing
virtual Test *create() const { return nullptr; }
- std::string name;
- std::string desc;
+ const char *name;
+ const char *desc;
+ test_location location;
public:
static list_t & registry()
{
@@ -125,36 +206,81 @@ namespace plib::testing
Test *create() const override { return new T(); } // NOLINT
};
- template <typename C, typename T1, typename T2>
- bool internal_assert(C comp,
- const char* exp1, const char* exp2,
- const T1& val1, const T2& val2)
+ template <typename L>
+ std::pair<bool, std::string> catch_exception(L lambda)
{
- if (comp(val1, val2))
+ try {
+ lambda();
+ }
+ catch (std::exception &ptest_e)
{
- std::cout << "\tOK: " << exp1 << " " << C::opstr() << " " << exp2 << "\n";
- return true;
+ return { true, ptest_e.what() };
}
- std::cout << "\tFAIL: " << exp1 << " " << C::opstr() << " " << exp2
- << " <" << val1 << ">,<" << val2 << ">\n";
- return false;
+ catch (...)
+ {
+ return { true, "" };
+ }
+ return { false, "" };
}
- static inline int run_all_tests()
+ static inline int run_all_tests(loglevel ll)
{
- std::cout << "======================================\n";
- std::cout << "Running " << reg_entry_base::registry().size() << " tests\n";
- std::cout << "======================================\n";
- for (auto &e : reg_entry_base::registry())
+ std::cout << "================================================" << std::endl;
+ std::cout << "Running " << reg_entry_base::registry().size() << " test groups" << std::endl;
+ std::cout << "================================================" << std::endl;
+
+ auto &list = reg_entry_base::registry();
+
+ std::sort(list.begin(), list.end(), [](reg_entry_base *a, reg_entry_base *b) {
+ return (a->name < b->name);
+ });
+
+ std::size_t total_errors(0);
+ std::size_t total_tests(0);
+
+ for (auto &e : list)
{
- std::cout << e->name << "::" << e->desc << ":\n";
- Test *t = e->create();
- t->SetUp();
- t->run();
- t->TearDown();
- delete t;
+ test_parameters params;
+ params.m_loglevel = ll;
+ params.m_last_source = e->location;
+
+ std::cout << e->name << "::" << e->desc << ":" << std::endl;
+ Test *t = nullptr;
+
+ std::pair<bool, std::string> r;
+ if ((r = catch_exception([&]{
+ t = e->create();
+ t->set_parameters(&params);
+ })).first)
+ {
+ stream_error(std::cout, e->location) << "unexpected exception thrown during instantiation" << (r.second != "" ? ": " + r.second : "") << std::endl;
+ total_errors++;
+ }
+ else if ((r = catch_exception([&]{ t->SetUp(); })).first)
+ {
+ stream_error(std::cout, e->location) << "unexpected exception thrown during Setup" << (r.second != "" ? ": " + r.second : "") << std::endl;
+ total_errors++;
+ }
+ else if ((r = catch_exception([&]{ t->run(); })).first)
+ {
+ stream_error(std::cout, params.m_last_source) << "unexpected exception thrown during run after this line" << (r.second != "" ? ": " + r.second : "") << std::endl;
+ total_errors++;
+ }
+ else if ((r = catch_exception([&]{ t->TearDown(); })).first)
+ {
+ stream_error(std::cout, e->location) << "unexpected exception thrown during Teardown" << (r.second != "" ? ": " + r.second : "") << std::endl;
+ total_errors++;
+ }
+
+ total_errors += params.m_num_errors;
+ total_tests += params.m_num_tests;
+ if (t != nullptr)
+ delete t;
}
- return 0;
+ std::cout << "================================================" << std::endl;
+ std::cout << "Found " << total_errors << " errors in " << total_tests << " tests from " << reg_entry_base::registry().size() << " test groups" << std::endl;
+ std::cout << "================================================" << std::endl;
+ return (total_errors ? 1 : 0);
}
#define DEF_COMP(name, op) \
diff --git a/src/lib/netlist/plib/ptime.h b/src/lib/netlist/plib/ptime.h
index 3d5c912f812..cb597aa590f 100644
--- a/src/lib/netlist/plib/ptime.h
+++ b/src/lib/netlist/plib/ptime.h
@@ -60,10 +60,9 @@ namespace plib
}
template <typename O, typename T = std::enable_if_t<!ptime_le<ptime<O, RES>, ptime>::value, int>>
- constexpr explicit ptime(const ptime<O, RES> &rhs, T dummy = 0) noexcept
+ constexpr explicit ptime(const ptime<O, RES> &rhs,[[maybe_unused]] T dummy = 0) noexcept
: m_time(static_cast<TYPE>(rhs.m_time))
{
- plib::unused_var(dummy);
}
template <typename O>
diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h
index 12e2a73f826..7f09a083793 100644
--- a/src/lib/netlist/plib/ptypes.h
+++ b/src/lib/netlist/plib/ptypes.h
@@ -81,8 +81,7 @@ namespace plib
UNKNOWN,
CLANG,
GCC,
- MSC,
- NVCC
+ MSC
};
enum class ci_cpp_stdlib
@@ -115,7 +114,18 @@ namespace plib
enum class ci_env
{
DEFAULT,
- MSVC
+ MSVC,
+ NVCC
+ };
+
+ // <sys/types.h> on ubuntu system may define major and minor as macros
+ // That's why we use vmajor, .. here
+ template <std::size_t MAJOR, std::size_t MINOR>
+ struct typed_version
+ {
+ using vmajor = std::integral_constant<std::size_t, MAJOR>;
+ using vminor = std::integral_constant<std::size_t, MINOR>;
+ using full = std::integral_constant<std::size_t, MAJOR * 100 + MINOR>;
};
struct compile_info
@@ -144,21 +154,18 @@ namespace plib
static constexpr int128_type int128_max() { return int128_type(); }
static constexpr uint128_type uint128_max() { return uint128_type(); }
#endif
- #if (NVCCBUILD > 0)
- using type = std::integral_constant<ci_compiler, ci_compiler::NVCC>;
- using version = std::integral_constant<int, NVCCBUILD>;
- #elif defined(__clang__)
+ #if defined(__clang__)
using type = std::integral_constant<ci_compiler, ci_compiler::CLANG>;
- using version = std::integral_constant<int, (__clang_major__) * 100 + (__clang_minor__)>;
+ using version = typed_version<__clang_major__, __clang_minor__>;
#elif defined(__GNUC__)
using type = std::integral_constant<ci_compiler, ci_compiler::GCC>;
- using version = std::integral_constant<int, (__GNUC__) * 100 + (__GNUC_MINOR__)>;
+ using version = typed_version< __GNUC__, __GNUC_MINOR__ >;
#elif defined(_MSC_VER)
using type = std::integral_constant<ci_compiler, ci_compiler::MSC>;
- using version = std::integral_constant<int, _MSC_VER>;
+ using version = typed_version<_MSC_VER / 100, _MSC_VER % 100>;
#else
using type = std::integral_constant<ci_compiler, ci_compiler::UNKNOWN>;
- using version = std::integral_constant<int, 0>;
+ using version = typed_version<0, 0>;
#endif
#if defined(_LIBCPP_VERSION)
using cpp_stdlib = std::integral_constant<ci_cpp_stdlib, ci_cpp_stdlib::LIBCPP>;
@@ -212,9 +219,9 @@ namespace plib
using mingw = std::integral_constant<bool, false>;
#endif
#if defined(__APPLE__)
- using clang_noexcept_issue = std::integral_constant<bool, version::value < 1100>;
+ using clang_noexcept_issue = std::integral_constant<bool, version::vmajor::value < 11>;
#else
- using clang_noexcept_issue = std::integral_constant<bool, (type::value == ci_compiler::CLANG) && (version::value < 800)>;
+ using clang_noexcept_issue = std::integral_constant<bool, (type::value == ci_compiler::CLANG) && (version::vmajor::value < 8)>;
#endif
#if defined(__ia64__)
using abi_vtable_function_descriptors = std::integral_constant<bool, true>;
@@ -223,8 +230,18 @@ namespace plib
#endif
#if defined(_MSC_VER)
using env = std::integral_constant<ci_env, ci_env::MSVC>;
+ using env_version = typed_version<_MSC_VER / 100, _MSC_VER % 100>;
+ #elif defined(__NVCC__) || defined(__CUDACC__)
+ using env = std::integral_constant<ci_env, ci_env::NVCC>;
+ using env_version = typed_version<__CUDA_API_VER_MAJOR__, __CUDA_API_VER_MINOR__>;
+ #if defined(__CUDA_ARCH__)
+ using cuda_arch = std::integral_constant<std::size_t, __CUDA_ARCH__>;
+ #else
+ using cuda_arch = std::integral_constant<std::size_t, 0>;
+ #endif
#else
using env = std::integral_constant<ci_env, ci_env::DEFAULT>;
+ using env_version = version;
#endif
};
@@ -336,7 +353,7 @@ namespace plib
/// @tparam Ts unsused parameters
///
template<typename... Ts>
- inline void unused_var(Ts&&...) noexcept {} // NOLINT(readability-named-parameter)
+ inline void unused_var(Ts&&...) noexcept {} // NOLINT(readability-named-parameter) // FIXME: remove unused var completely
/// \brief copy type S to type D byte by byte
///
diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp
index 7d27cc50366..4fced7acf27 100644
--- a/src/lib/netlist/prg/nltool.cpp
+++ b/src/lib/netlist/prg/nltool.cpp
@@ -1319,7 +1319,9 @@ int tool_app_t::execute()
convert();
else if (cmd == "tests")
{
- return PRUN_ALL_TESTS();
+ return PRUN_ALL_TESTS(opt_verb() ? ::plib::testing::loglevel::INFO
+ : opt_quiet() ? ::plib::testing::loglevel::ERROR
+ : ::plib::testing::loglevel::WARNING);
}
else
{
diff --git a/src/lib/netlist/prg/nlwav.cpp b/src/lib/netlist/prg/nlwav.cpp
index 05d524fa1e2..9a8d627028d 100644
--- a/src/lib/netlist/prg/nlwav.cpp
+++ b/src/lib/netlist/prg/nlwav.cpp
@@ -825,6 +825,7 @@ int nlwav_app::execute()
PMAIN(nlwav_app)
+// spell-checker:disable
//
// Der Daten-Abschnitt enth??lt die Abtastwerte:
// Offset L??nge Inhalt Beschreibung
@@ -846,3 +847,4 @@ PMAIN(nlwav_app)
// 32 (0x20) 2 <block align> Frame-Gr????e = <Anzahl der Kan??le>????????((<Bits/Sample (eines Kanals)>???+???7)???/???8) (Division ohne Rest)
// 34 (0x22) 2 <bits/sample> Anzahl der Datenbits pro Samplewert je Kanal (z. B. 12)
//
+// spell-checker:enable
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index fb239221cbf..62d15d32127 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -503,11 +503,10 @@ namespace netlist::solver
return netlist_time::from_fp(m_params.m_max_timestep);
}
- netlist_time matrix_solver_t::solve(netlist_time_ext now, const char *source)
+ netlist_time matrix_solver_t::solve(netlist_time_ext now, [[maybe_unused]] const char *source)
{
auto delta = static_cast<netlist_time>(now - m_last_step());
PFDEBUG(printf("solve %.10f\n", delta.as_double());)
- plib::unused_var(source);
// We are already up to date. Avoid oscillations.
// FIXME: Make this a parameter!
diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h
index 3bac5e3795c..ea9f038bf8d 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.h
+++ b/src/lib/netlist/solver/nld_matrix_solver.h
@@ -263,8 +263,7 @@ namespace netlist::solver
// this should only occur outside of execution and thus
// using time should be safe.
- const netlist_time new_timestep = solve(exec().time(), "solve_now");
- plib::unused_var(new_timestep);
+ [[maybe_unused]] const netlist_time new_timestep = solve(exec().time(), "solve_now");
update_inputs();
@@ -280,8 +279,7 @@ namespace netlist::solver
// We only need to update the net first if this is a time stepping net
if (timestep_device_count() > 0)
{
- const netlist_time new_timestep = solve(exec().time(), "change_state");
- plib::unused_var(new_timestep);
+ [[maybe_unused]] const netlist_time new_timestep = solve(exec().time(), "change_state");
update_inputs();
}
f();
@@ -298,9 +296,8 @@ namespace netlist::solver
virtual void log_stats();
- virtual std::pair<pstring, pstring> create_solver_code(solver::static_compile_target target)
+ virtual std::pair<pstring, pstring> create_solver_code([[maybe_unused]] solver::static_compile_target target)
{
- plib::unused_var(target);
return { "", plib::pfmt("/* solver doesn't support static compile */\n\n") };
}
diff --git a/src/lib/netlist/solver/nld_matrix_solver_ext.h b/src/lib/netlist/solver/nld_matrix_solver_ext.h
index f0bef62b0a9..b54cd9e1cdd 100644
--- a/src/lib/netlist/solver/nld_matrix_solver_ext.h
+++ b/src/lib/netlist/solver/nld_matrix_solver_ext.h
@@ -55,15 +55,13 @@ namespace netlist::solver
plib::pmatrix2d<float_type *> m_mat_ptr;
template <typename T, typename M>
- void log_fill(const T &fill, M &mat)
+ void log_fill(const T &fill,[[maybe_unused]] M &mat)
{
const std::size_t iN = fill.size();
// FIXME: Not yet working, mat_cr.h needs some more work
#if 0
auto mat_GE = dynamic_cast<plib::pGEmatrix_cr_t<typename M::base> *>(&mat);
-#else
- plib::unused_var(mat);
#endif
std::vector<unsigned> levL(iN, 0);
std::vector<unsigned> levU(iN, 0);
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 29b2f66f80e..9f31872b472 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -150,15 +150,13 @@ namespace netlist::devices
plib::omp::set_num_threads(nthreads);
plib::omp::for_static(static_cast<std::size_t>(0), solvers.size(), [&solvers, now](std::size_t i)
{
- const netlist_time ts = solvers[i]->ptr->solve(now);
- plib::unused_var(ts);
+ [[maybe_unused]] const netlist_time ts = solvers[i]->ptr->solve(now);
});
}
else
for (auto & solver : solvers)
{
- const netlist_time ts = solver->ptr->solve(now);
- plib::unused_var(ts);
+ [[maybe_unused]] const netlist_time ts = solver->ptr->solve(now);
}
for (auto & solver : solvers)
diff --git a/src/lib/netlist/tests/test_pmfp.cpp b/src/lib/netlist/tests/test_pmfp.cpp
index 1f526806b6b..1d80e80bc16 100644
--- a/src/lib/netlist/tests/test_pmfp.cpp
+++ b/src/lib/netlist/tests/test_pmfp.cpp
@@ -15,13 +15,15 @@
#include <utility>
#include <memory>
-/// plib::late_pmfp<plib::pmfp<void, pstring>> a(&nld_7493::printer);
+/// `plib::late_pmfp<plib::pmfp<void, pstring>> a(&nld_7493::printer);`
/// // Store the a object somewhere
///
/// // After full construction ...
///
+/// ```
/// auto dele = a(this);
/// dele(pstring("Hello World!"));
+/// ```
class test_late_pmfp : public plib::testing::Test
{
@@ -52,23 +54,23 @@ PTEST_F(test_late_pmfp, late_pmfp)
PTEST(test_compile, compile)
{
#if !PPMF_USE_MAME_DELEGATES
- plib::pmfp_base<PPMF_TYPE_PMF, void(int)> mfp_PPMF_TYPE_PMF;
- plib::pmfp_base<PPMF_TYPE_INTERNAL_ITANIUM, void(int)> mfp_PPMF_TYPE_INTERNAL_ITANIUM;
- plib::pmfp_base<PPMF_TYPE_INTERNAL_ARM, void(int)> mfp_PPMF_TYPE_INTERNAL_ARM;
- plib::pmfp_base<PPMF_TYPE_INTERNAL_MSC, void(int)> mfp_PPMF_TYPE_INTERNAL_MSC;
+ plib::pmfp_base<plib::ppmf_type::PMF, void(int)> mfp_PPMF_TYPE_PMF;
+ plib::pmfp_base<plib::ppmf_type::INTERNAL_ITANIUM, void(int)> mfp_PPMF_TYPE_INTERNAL_ITANIUM;
+ plib::pmfp_base<plib::ppmf_type::INTERNAL_ARM, void(int)> mfp_PPMF_TYPE_INTERNAL_ARM;
+ plib::pmfp_base<plib::ppmf_type::INTERNAL_MSC, void(int)> mfp_PPMF_TYPE_INTERNAL_MSC;
PEXPECT_TRUE(mfp_PPMF_TYPE_PMF.isnull());
PEXPECT_TRUE(mfp_PPMF_TYPE_INTERNAL_ITANIUM.isnull());
PEXPECT_TRUE(mfp_PPMF_TYPE_INTERNAL_ARM.isnull());
PEXPECT_TRUE(mfp_PPMF_TYPE_INTERNAL_MSC.isnull());
#endif
-#if defined(__GNUC__) && !defined(__clang__) && (NVCCBUILD == 0)
- plib::pmfp_base<PPMF_TYPE_GNUC_PMF_CONV, void(int)> mfp_PPMF_TYPE_GNUC_PMF_CONV;
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__NVCC__)
+ plib::pmfp_base<plib::ppmf_type::GNUC_PMF_CONV, void(int)> mfp_PPMF_TYPE_GNUC_PMF_CONV;
PEXPECT_TRUE(mfp_PPMF_TYPE_GNUC_PMF_CONV.isnull());
#else
- PEXPECT_NE("PPMF_TYPE_GNUC_PMF_CONV not supported on this build", "");
+ PEXPECT_NE("ppmf_type::GNUC_PMF_CONV not supported on this build", "");
#endif
#if defined(__EMSCRIPTEN__)
- PEXPECT_EQ(plib::ppmf_internal::value,PPMF_TYPE_INTERNAL_ARM);
+ PEXPECT_EQ(plib::ppmf_internal_selector::value,plib::ppmf_type::INTERNAL_ARM);
#endif
}
diff --git a/src/lib/netlist/tests/test_pmfp_multibase.cpp b/src/lib/netlist/tests/test_pmfp_multibase.cpp
index 01aba2876e5..83f14b94ce0 100644
--- a/src/lib/netlist/tests/test_pmfp_multibase.cpp
+++ b/src/lib/netlist/tests/test_pmfp_multibase.cpp
@@ -29,9 +29,8 @@ operator << (std::basic_ostream<char>& os, const std::pair<F, S> &p)
template <class T>
typename std::enable_if_t<!plib::has_ostream_operator<std::basic_ostream<char>, T>::value, std::basic_ostream<char>&>
-operator << (std::basic_ostream<char>& os, const T &p)
+operator << ([[maybe_unused]] std::basic_ostream<char>& os, [[maybe_unused]] const T &p)
{
- plib::unused_var(p);
os << std::string(typeid(T).name());
return os;
}
@@ -350,7 +349,7 @@ PTEST_F(pmfp_test_complex_return, multibase_test)
PEXPECT_EQ(static_cast<int>(ts17.run_ft<INT128>(17)), 17); // FIXME: no operator << for INT128 yet
PEXPECT_EQ(sizeof(INT128), 16u);
}
-#endif
+#endif
PEXPECT_EQ(ts17.run_ft<long double>(17), 17);
PEXPECT_EQ(ts17.run_ft<double>(17), 17);
PEXPECT_EQ(ts17.run_ft<int>(17), 17);
diff --git a/src/lib/netlist/tests/test_precommit.cpp b/src/lib/netlist/tests/test_precommit.cpp
new file mode 100644
index 00000000000..b0f1dfa98eb
--- /dev/null
+++ b/src/lib/netlist/tests/test_precommit.cpp
@@ -0,0 +1,26 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+
+///
+/// \file test_pmfp.cpp
+///
+/// tests for plib::pmfp
+///
+
+#include "plib/pconfig.h"
+#include "plib/ppmf.h"
+#include "netlist/nl_config.h"
+
+#include "plib/ptests.h"
+
+PTEST(test_precommit, precommit)
+{
+ PEXPECT_EQ(PPMF_EXPERIMENTAL, 0);
+ PEXPECT_EQ(PPMF_USE_MAME_DELEGATES, 0);
+
+ PEXPECT_EQ(NL_USE_COPY_INSTEAD_OF_REFERENCE, 0);
+ PEXPECT_EQ(NL_USE_BACKWARD_EULER, 1);
+ PEXPECT_EQ(PUSE_FLOAT128, 0);
+ PEXPECT_EQ(NL_USE_FLOAT128, PUSE_FLOAT128);
+ PEXPECT_EQ(AVOID_NOOP_QUEUE_PUSHES, 0);
+}
diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp
index d1ef69bc6b0..31d2a657dcc 100644
--- a/src/lib/netlist/tools/nl_convert.cpp
+++ b/src/lib/netlist/tools/nl_convert.cpp
@@ -348,7 +348,7 @@ void nl_convert_spice_t::convert(const pstring &contents)
pstring line = "";
- // process linecontinuation
+ // process line continuation
for (const auto &i : spnl)
{
@@ -365,7 +365,7 @@ void nl_convert_spice_t::convert(const pstring &contents)
after_linecontinuation.push_back(line);
spnl.clear(); // no longer needed
- // Process subcircuits
+ // Process sub circuits
std::vector<std::vector<pstring>> subckts;
std::vector<pstring> nl;
@@ -463,7 +463,7 @@ void nl_convert_spice_t::process_line(const pstring &line)
else if (tt[0] == ".MODEL")
{
pstring mod(rem(tt,2));
- // Filter out ngspice X=X model declarations
+ // Filter out `ngspice` X=X model declarations
if (tt[1] != mod)
out("NET_MODEL(\"{} {}\")\n", m_subckt + tt[1], mod);
}
@@ -477,13 +477,12 @@ void nl_convert_spice_t::process_line(const pstring &line)
case 'Q':
{
// check for fourth terminal ... should be numeric net
- // including "0" or start with "N" (ltspice)
+ // including "0" or start with "N" (`ltspice`)
pstring model;
pstring pins ="CBE";
bool err(false);
- auto nval = plib::pstonum_ne<long>(tt[4], err);
- plib::unused_var(nval);
+ [[maybe_unused]] auto nval = plib::pstonum_ne<long>(tt[4], err);
if ((!err || plib::startsWith(tt[4], "N")) && tt.size() > 5)
model = tt[5];
@@ -525,7 +524,7 @@ void nl_convert_spice_t::process_line(const pstring &line)
add_term(tt[1], tt[0] + ".1");
add_term(tt[2], tt[0] + ".2");
break;
- case 'B': // arbitrary behavioural current source - needs manual work afterwords
+ case 'B': // arbitrary behavioural current source - needs manual work afterwards
add_device("CS", tt[0], "/*" + rem(tt, 3) + "*/");
add_term(tt[1], tt[0] + ".P");
add_term(tt[2], tt[0] + ".N");
@@ -562,7 +561,7 @@ void nl_convert_spice_t::process_line(const pstring &line)
add_term(nextnet, devname, 1);
add_term(net2[0], devname, 2);
add_term(net2[1], devname, 3);
- //add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
+ //# add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
lastnet = nextnet;
}
}
@@ -597,7 +596,7 @@ void nl_convert_spice_t::process_line(const pstring &line)
pstring extranetname = devname + "net";
m_replace.push_back({tt[sce+i], devname + ".IP", extranetname });
add_term(extranetname, devname + ".IN");
- //add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
+ //# add_device_extra(devname, "PARAM({}, {})", devname + ".G", tt[scoeff+i]);
}
}
break;
@@ -735,7 +734,7 @@ nl_convert_eagle_t::tokenizer::tokenizer(nl_convert_eagle_t &convert)
this->identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-")
.number_chars(".0123456789", "0123456789eE-.") //FIXME: processing of numbers
.whitespace(pstring("") + ' ' + static_cast<char>(9) + static_cast<char>(10) + static_cast<char>(13))
- // FIXME: gnetlist doesn't print comments
+ // FIXME: netlist doesn't print comments
.comment("/*", "*/", "//")
.string_char('\'');
m_tok_ADD = register_token("ADD");
@@ -878,7 +877,7 @@ nl_convert_rinf_t::tokenizer::tokenizer(nl_convert_rinf_t &convert)
this->identifier_chars(".abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_-")
.number_chars("0123456789", "0123456789eE-.") //FIXME: processing of numbers
.whitespace(pstring("") + ' ' + static_cast<char>(9) + static_cast<char>(10) + static_cast<char>(13))
- // FIXME: gnetlist doesn't print comments
+ // FIXME: netlist doesn't print comments
.comment("","","//") // FIXME:needs to be confirmed
.string_char('"');
m_tok_HEA = register_token(".HEA");
diff --git a/src/lib/netlist/tools/nl_convert.h b/src/lib/netlist/tools/nl_convert.h
index 6ef62ffe73c..2b5a4ec8aeb 100644
--- a/src/lib/netlist/tools/nl_convert.h
+++ b/src/lib/netlist/tools/nl_convert.h
@@ -72,7 +72,7 @@ protected:
struct replace_t
{
- pstring m_ce; // controlling element - must be twoterm
+ pstring m_ce; // controlling element - must be a two terminal element
pstring m_repterm; // replace with terminal
pstring m_net; // connect to net
};