From e62e2d759b1a952390e0fe7a7ed36e33d2676ba5 Mon Sep 17 00:00:00 2001 From: couriersud Date: Thu, 17 Sep 2020 19:45:10 +0200 Subject: netlist: optimize headers. * where possible rely on forward declarations to optimiuze compile time. --- src/lib/netlist/analog/nld_generic_models.h | 1 - src/lib/netlist/core/setup.h | 19 ------------ src/lib/netlist/devices/net_lib.h | 2 -- src/lib/netlist/nl_base.cpp | 4 +-- src/lib/netlist/nl_parser.cpp | 22 ++++++++++++++ src/lib/netlist/nl_parser.h | 23 ++++++++++++++- src/lib/netlist/nl_setup.cpp | 19 +----------- src/lib/netlist/nl_setup.h | 3 +- src/lib/netlist/nltypes.h | 16 ---------- src/lib/netlist/plib/ptokenizer.h | 46 ++++++++++++++++++----------- src/lib/netlist/plib/ptypes.h | 24 +++++++++++++++ 11 files changed, 101 insertions(+), 78 deletions(-) diff --git a/src/lib/netlist/analog/nld_generic_models.h b/src/lib/netlist/analog/nld_generic_models.h index 781dc2a16bb..bb8adc466eb 100644 --- a/src/lib/netlist/analog/nld_generic_models.h +++ b/src/lib/netlist/analog/nld_generic_models.h @@ -9,7 +9,6 @@ /// #include "nl_base.h" -//#include "../nl_setup.h" // // Set to 0 to use a linearized diode model in the range exceeding diff --git a/src/lib/netlist/core/setup.h b/src/lib/netlist/core/setup.h index 61ab79de545..8b8a49dbc34 100644 --- a/src/lib/netlist/core/setup.h +++ b/src/lib/netlist/core/setup.h @@ -340,25 +340,6 @@ namespace netlist pstring m_setup_func_name; }; - class source_token_t : public source_netlist_t - { - public: - source_token_t(const pstring &name, const parser_t::token_store &store) - : m_store(store) - , m_name(name) - { - } - - bool parse(nlparse_t &setup, const pstring &name) override; - - protected: - plib::istream_uptr stream(const pstring &name) override; - - private: - parser_t::token_store m_store; - pstring m_name; - }; - } // namespace netlist diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index db3f9c1519d..1a8b72fcd5a 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -28,8 +28,6 @@ #define IND_P(ind) ((ind) * 1e-12) #endif -NETLIST_EXTERNAL(base_lib) - #include "../generated/nld_devinc.h" diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index a4510fe5765..d0a0e707aaf 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -16,10 +16,10 @@ #include "nl_errstr.h" -#include "devices/net_lib.h" - #include +NETLIST_EXTERNAL(base_lib) + namespace netlist { diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index 32a5c542a16..3e7ff32e804 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -561,4 +561,26 @@ pstring parser_t::stringify_expression(token_t &tok) return ret; } +// ---------------------------------------------------------------------------------------- +// source_token_t +// ---------------------------------------------------------------------------------------- + +bool source_token_t::parse(nlparse_t &setup, const pstring &name) +{ + if (name == m_name) + { + auto ret = setup.parse_tokens(m_store, name); + return ret; + } + + return false; +} + +plib::istream_uptr source_token_t::stream(const pstring &name) +{ + plib::unused_var(name); + return plib::istream_uptr(); +} + + } // namespace netlist diff --git a/src/lib/netlist/nl_parser.h b/src/lib/netlist/nl_parser.h index 077f1b10792..cbc757307d5 100644 --- a/src/lib/netlist/nl_parser.h +++ b/src/lib/netlist/nl_parser.h @@ -9,6 +9,7 @@ #define NL_PARSER_H_ #include "nltypes.h" // for setup_t +#include "core/setup.h" #include "plib/ptokenizer.h" #include @@ -89,7 +90,27 @@ namespace netlist std::unordered_map m_local; token_store *m_cur_local; -}; + }; + + class source_token_t : public source_netlist_t + { + public: + source_token_t(const pstring &name, const parser_t::token_store &store) + : m_store(store) + , m_name(name) + { + } + + bool parse(nlparse_t &setup, const pstring &name) override; + + protected: + plib::istream_uptr stream(const pstring &name) override; + + private: + parser_t::token_store m_store; + pstring m_name; + }; + } // namespace netlist diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index fcea082a036..9af1ec92d51 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -352,7 +352,7 @@ namespace netlist return false; } - bool nlparse_t::parse_tokens(const parser_t::token_store &tokens, const pstring &name) + bool nlparse_t::parse_tokens(const plib::detail::token_store &tokens, const pstring &name) { parser_t parser(*this); return parser.parse(tokens, name); @@ -1762,22 +1762,5 @@ plib::istream_uptr source_proc_t::stream(const pstring &name) return plib::istream_uptr(); } -bool source_token_t::parse(nlparse_t &setup, const pstring &name) -{ - if (name == m_name) - { - auto ret = setup.parse_tokens(m_store, name); - return ret; - } - - return false; -} - -plib::istream_uptr source_token_t::stream(const pstring &name) -{ - plib::unused_var(name); - return plib::istream_uptr(); -} - } // namespace netlist diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 7f6988f2951..fd9cb11afab 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -14,7 +14,6 @@ #include "plib/pstring.h" #include "nl_config.h" -#include "nl_parser.h" #include "nltypes.h" #include @@ -229,7 +228,7 @@ namespace netlist // FIXME: used by source_t - need a different approach at some time bool parse_stream(plib::istream_uptr &&istrm, const pstring &name); - bool parse_tokens(const parser_t::token_store &tokens, const pstring &name); + bool parse_tokens(const plib::detail::token_store &tokens, const pstring &name); template void add_include(Args&&... args) diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h index 422a9ddfac4..5781619af1a 100644 --- a/src/lib/netlist/nltypes.h +++ b/src/lib/netlist/nltypes.h @@ -22,22 +22,6 @@ #include -// FIXME: Move to ptypes -namespace plib -{ - // FORWARD declarations - template - class mempool_arena; - - struct aligned_arena; - class dynlib_base; - - template - class plog_base; - - struct plog_level; -} // namespace plib - namespace netlist { // ----------------------------------------------------------------------------- diff --git a/src/lib/netlist/plib/ptokenizer.h b/src/lib/netlist/plib/ptokenizer.h index 717d3fcd550..9a194a542d5 100644 --- a/src/lib/netlist/plib/ptokenizer.h +++ b/src/lib/netlist/plib/ptokenizer.h @@ -19,22 +19,7 @@ namespace plib { - class ptokenizer - { - public: - explicit ptokenizer() // NOLINT(misc-forwarding-reference-overload, bugprone-forwarding-reference-overload) - : m_strm(nullptr) - , m_unget(0) - , m_string('"') - , m_support_line_markers(true) // FIXME - , m_token_queue(nullptr) - { - clear(); - } - - PCOPYASSIGNMOVE(ptokenizer, delete) - - virtual ~ptokenizer() = default; + namespace detail { PENUM(token_type, IDENTIFIER, @@ -109,7 +94,34 @@ namespace plib { pstring m_token; }; - using token_store = std::vector; + class token_store : public std::vector + { + using std::vector::vector; + }; + + } // namespace detail + + class ptokenizer + { + public: + explicit ptokenizer() // NOLINT(misc-forwarding-reference-overload, bugprone-forwarding-reference-overload) + : m_strm(nullptr) + , m_unget(0) + , m_string('"') + , m_support_line_markers(true) // FIXME + , m_token_queue(nullptr) + { + clear(); + } + + PCOPYASSIGNMOVE(ptokenizer, delete) + + virtual ~ptokenizer() = default; + + using token_type = detail::token_type; + using token_id_t = detail::token_id_t; + using token_t = detail::token_t; + using token_store = detail::token_store; // tokenizer stuff follows ... diff --git a/src/lib/netlist/plib/ptypes.h b/src/lib/netlist/plib/ptypes.h index 5c5cb37695a..544b8ab0eff 100644 --- a/src/lib/netlist/plib/ptypes.h +++ b/src/lib/netlist/plib/ptypes.h @@ -39,6 +39,30 @@ #undef EMSCRIPTEN #endif +// ----------------------------------------------------------------------------- +// forward definitions +// ----------------------------------------------------------------------------- + +namespace plib +{ + template + class mempool_arena; + + struct aligned_arena; + class dynlib_base; + + template + class plog_base; + + struct plog_level; + + namespace detail + { + class token_store; + } // namespace detail + +} // namespace plib + namespace plib { //============================================================ -- cgit v1.2.3