summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_base.h
diff options
context:
space:
mode:
author couriersud <couriersud@arcor.de>2016-12-27 15:19:18 +0100
committer couriersud <couriersud@arcor.de>2016-12-27 15:19:18 +0100
commit016535b3d0b2a3e4d363a2a7b96fe171b8136916 (patch)
tree28872447e7bd8aac61aeb0e21a0cdf56924b643b /src/lib/netlist/nl_base.h
parent28a734436e76d590649bf1862e4f69826bdb0df4 (diff)
Simplify. (nw)
Diffstat (limited to 'src/lib/netlist/nl_base.h')
-rw-r--r--src/lib/netlist/nl_base.h119
1 files changed, 61 insertions, 58 deletions
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 88b09658f2d..3f315fe603b 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -830,7 +830,6 @@ namespace netlist
public:
enum param_type_t {
- MODEL,
STRING,
DOUBLE,
INTEGER,
@@ -844,105 +843,109 @@ namespace netlist
param_type_t param_type() const { return m_param_type; }
protected:
- virtual void changed() { }
- void changed_and_update();
- void register_and_set();
+ void update_param();
+
+ template<typename C>
+ void set(C &p, const C v)
+ {
+ if (p != v)
+ {
+ p = v;
+ update_param();
+ }
+ }
private:
const param_type_t m_param_type;
};
- template <typename C, param_t::param_type_t T>
- class param_template_t : public param_t
+ class param_ptr_t final: public param_t
{
public:
- param_template_t(device_t &device, const pstring name, const C val);
-
- const C operator()() const { return Value(); }
-
- void setTo(const C &param)
- {
- if (m_param != param)
- {
- m_param = param;
- changed_and_update();
- }
- }
- void initial(const C &val) { m_param = val; changed(); }
-
- protected:
- C Value() const { return m_param; }
- C m_param;
+ param_ptr_t(device_t &device, const pstring name, std::uint8_t* val);
+ std::uint8_t * operator()() const { return m_param; }
+ void setTo(std::uint8_t *param) { set(m_param, param); }
private:
+ std::uint8_t* m_param;
};
- template <typename C, param_t::param_type_t T>
- class param_template_final_t final : public param_template_t<C, T>
+ class param_logic_t final: public param_t
{
public:
- param_template_final_t(device_t &device, const pstring name, const C val)
- : param_template_t<C,T>(device, name, val)
- {
- this->register_and_set();
- }
+ param_logic_t(device_t &device, const pstring name, const bool val);
+ const bool operator()() const { return m_param; }
+ void setTo(const bool &param) { set(m_param, param); }
+ private:
+ bool m_param;
};
- using param_double_t = param_template_final_t<nl_double, param_t::DOUBLE>;
- using param_int_t = param_template_final_t<int, param_t::INTEGER>;
+ class param_int_t final: public param_t
+ {
+ public:
+ param_int_t(device_t &device, const pstring name, const int val);
+ const int operator()() const { return m_param; }
+ void setTo(const int &param) { set(m_param, param); }
+ private:
+ int m_param;
+ };
- using param_logic_t = param_template_final_t<bool, param_t::LOGIC>;
- using param_ptr_t = param_template_final_t<std::uint_fast8_t*, param_t::POINTER>;
- using param_str_base_t = param_template_t<pstring, param_t::STRING>;
+ class param_double_t final: public param_t
+ {
+ public:
+ param_double_t(device_t &device, const pstring name, const double val);
+ const double operator()() const { return m_param; }
+ void setTo(const double &param) { set(m_param, param); }
+ private:
+ double m_param;
+ };
- class param_str_t final : public param_str_base_t
+ class param_str_t : public param_t
{
public:
- param_str_t(device_t &device, const pstring name, const pstring val)
- : param_str_base_t(device, name, val)
+ param_str_t(device_t &device, const pstring name, const pstring val);
+ const pstring operator()() const { return Value(); }
+ void setTo(const pstring &param)
{
- register_and_set();
+ if (m_param != param)
+ {
+ m_param = param;
+ changed();
+ update_param();
+ }
}
+ protected:
+ virtual void changed() { }
+ pstring Value() const { return m_param; }
+ private:
+ pstring m_param;
};
- class param_model_t final : public param_str_base_t
+ class param_model_t final : public param_str_t
{
public:
param_model_t(device_t &device, const pstring name, const pstring val)
- : param_str_base_t(device, name, val)
- {
- register_and_set();
- }
+ : param_str_t(device, name, val) { }
/* these should be cached! */
nl_double model_value(const pstring &entity);
const pstring model_value_str(const pstring &entity);
const pstring model_type();
protected:
- virtual void changed() override
- {
- m_map.clear();
- }
+ virtual void changed() override { m_map.clear(); }
private:
model_map_t m_map;
};
- class param_data_t : public param_str_base_t
+ class param_data_t : public param_str_t
{
public:
-
- typedef uint8_t type;
-
param_data_t(device_t &device, const pstring name)
- : param_str_base_t(device, name, "") { }
-
+ : param_str_t(device, name, "") { }
std::unique_ptr<plib::pistream> stream();
-
protected:
virtual void changed() override { }
- private:
};
-
template <typename ST, std::size_t AW, std::size_t DW>
class param_rom_t final: public param_data_t
{
@@ -951,7 +954,7 @@ namespace netlist
param_rom_t(device_t &device, const pstring name)
: param_data_t(device, name)
{
- register_and_set();
+ stream()->read(&m_data[0],1<<AW);
}
const ST & operator[] (std::size_t n) { return m_data[n]; }