summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_setup.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/nl_setup.h')
-rw-r--r--src/lib/netlist/nl_setup.h60
1 files changed, 42 insertions, 18 deletions
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index aec2da2dcd8..e560a3b9f79 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -67,7 +67,7 @@ void NETLIST_NAME(name)(netlist::setup_t &setup) \
#define NETLIST_END() }
#define LOCAL_SOURCE(name) \
- setup.register_source(plib::make_unique_base<netlist::source_t, netlist::source_proc_t>(# name, &NETLIST_NAME(name)));
+ setup.register_source(plib::make_unique_base<netlist::source_t, netlist::source_proc_t>(setup, # name, &NETLIST_NAME(name)));
#define LOCAL_LIB_ENTRY(name) \
LOCAL_SOURCE(name) \
@@ -149,16 +149,28 @@ namespace netlist
class source_t
{
public:
+ enum type_t
+ {
+ SOURCE,
+ DATA
+ };
+
using list_t = std::vector<std::unique_ptr<source_t>>;
- source_t()
+ source_t(setup_t &setup, const type_t type = SOURCE)
+ : m_setup(setup), m_type(type)
{}
virtual ~source_t() { }
- virtual bool parse(setup_t &setup, const pstring &name) = 0;
+ virtual bool parse(const pstring &name);
+ virtual std::unique_ptr<plib::pistream> stream(const pstring &name) = 0;
+ setup_t &setup() { return m_setup; }
+ type_t type() const { return m_type; }
private:
+ setup_t &m_setup;
+ const type_t m_type;
};
// ----------------------------------------------------------------------------------------
@@ -181,7 +193,10 @@ namespace netlist
pstring build_fqn(const pstring &obj_name) const;
- void register_and_set_param(pstring name, param_t &param);
+ void register_param(pstring name, param_t &param);
+ pstring get_initial_param_val(const pstring name, const pstring def);
+ double get_initial_param_val(const pstring name, const double def);
+ int get_initial_param_val(const pstring name, const int def);
void register_term(detail::core_terminal_t &obj);
@@ -223,6 +238,7 @@ namespace netlist
/* parse a source */
void include(const pstring &netlist_name);
+ std::unique_ptr<plib::pistream> get_data_stream(const pstring name);
bool parse_stream(plib::pistream &istrm, const pstring &name);
@@ -265,10 +281,12 @@ namespace netlist
std::unordered_map<pstring, pstring> m_param_values;
std::unordered_map<pstring, detail::core_terminal_t *> m_terminals;
+ /* needed by proxy */
+ detail::core_terminal_t *find_terminal(const pstring &outname_in, detail::device_object_t::type_t atype, bool required = true);
+
private:
detail::core_terminal_t *find_terminal(const pstring &outname_in, bool required = true);
- detail::core_terminal_t *find_terminal(const pstring &outname_in, detail::device_object_t::type_t atype, bool required = true);
void merge_nets(detail::net_t &thisnet, detail::net_t &othernet);
@@ -307,12 +325,12 @@ namespace netlist
{
public:
- source_string_t(const pstring &source)
- : source_t(), m_str(source)
+ source_string_t(setup_t &setup, const pstring &source)
+ : source_t(setup), m_str(source)
{
}
- bool parse(setup_t &setup, const pstring &name) override;
+ virtual std::unique_ptr<plib::pistream> stream(const pstring &name) override;
private:
pstring m_str;
@@ -322,12 +340,12 @@ namespace netlist
{
public:
- source_file_t(const pstring &filename)
- : source_t(), m_filename(filename)
+ source_file_t(setup_t &setup, const pstring &filename)
+ : source_t(setup), m_filename(filename)
{
}
- bool parse(setup_t &setup, const pstring &name) override;
+ virtual std::unique_ptr<plib::pistream> stream(const pstring &name) override;
private:
pstring m_filename;
@@ -336,12 +354,12 @@ namespace netlist
class source_mem_t : public source_t
{
public:
- source_mem_t(const char *mem)
- : source_t(), m_str(mem)
+ source_mem_t(setup_t &setup, const char *mem)
+ : source_t(setup), m_str(mem)
{
}
- bool parse(setup_t &setup, const pstring &name) override;
+ virtual std::unique_ptr<plib::pistream> stream(const pstring &name) override;
private:
pstring m_str;
@@ -350,23 +368,29 @@ namespace netlist
class source_proc_t : public source_t
{
public:
- source_proc_t(pstring name, void (*setup_func)(setup_t &))
- : source_t(),
+ source_proc_t(setup_t &setup, pstring name, void (*setup_func)(setup_t &))
+ : source_t(setup),
m_setup_func(setup_func),
m_setup_func_name(name)
{
}
- bool parse(setup_t &setup, const pstring &name) override
+ virtual bool parse(const pstring &name) override
{
if (name == m_setup_func_name)
{
- m_setup_func(setup);
+ m_setup_func(setup());
return true;
}
else
return false;
}
+
+ virtual std::unique_ptr<plib::pistream> stream(const pstring &name) override
+ {
+ std::unique_ptr<plib::pistream> p(nullptr);
+ return p;
+ }
private:
void (*m_setup_func)(setup_t &);
pstring m_setup_func_name;