From 1092f2009b8b9d9653d0daa678e6ca30ac121f79 Mon Sep 17 00:00:00 2001 From: cracyc Date: Sun, 20 May 2018 14:56:47 -0500 Subject: psx/ctlrport: use required_device (nw) sort_hiscore: make it much faster (nw) --- plugins/hiscore/sort_hiscore.lua | 108 +++++++++++++++++++-------------------- src/devices/bus/psx/ctlrport.cpp | 5 +- src/devices/bus/psx/ctlrport.h | 4 +- 3 files changed, 56 insertions(+), 61 deletions(-) diff --git a/plugins/hiscore/sort_hiscore.lua b/plugins/hiscore/sort_hiscore.lua index b63bfe1673a..7d1f0031558 100644 --- a/plugins/hiscore/sort_hiscore.lua +++ b/plugins/hiscore/sort_hiscore.lua @@ -81,20 +81,20 @@ end lstfile:close() local sorted = {} -local comments = 0 +local sindex = {} +local comments = "" -for num, entry in ipairs(entries) do +for num, entry in pairs(entries) do if not entry.name then if entry.comment then if entry.comment[1]:sub(2,4) ~= "@s:" then - comments = comments + 1 - table.insert(sorted, comments, entry) + comments = comments .. table.concat(entry.comment, "\n") .. "\n" end end else table.sort(entry.name) entry.src = "source not found" - for num, name in ipairs(entry.name) do + for num, name in pairs(entry.name) do name = name:match("[^,]*") if not list[name] then entry.name[num] = entry.name[num] .. ": ; missing" @@ -103,61 +103,60 @@ for num, entry in ipairs(entries) do entry.src = list[name] end end + entry.data = table.concat(entry.data, "\n") + if entry.comment then + entry.comment = table.concat(entry.comment, "\n") + end sorted[#sorted + 1] = entry + if not sindex[entry.src] then + sindex[entry.src] = {} + end + sindex[entry.src][#sorted] = entry end end -for num1, entry in ipairs(sorted) do - if entry.data then - for num2, entry2 in ipairs(sorted) do - if entry2.data and entry.src == entry2.src and entry ~= entry2 and #entry.data == #entry2.data then - for i = 1, #entry2.data do - if entry.data[i] ~= entry2.data[i] then - break - end - if i == #entry2.data then - for num3, name in ipairs(entry2.name) do - entry.name[#entry.name + 1] = name - end - if entry2.comment then - for num3, comment in ipairs(entry2.comment) do - if not entry.comment then - entry.comment = {} - end - entry.comment[#entry.comment + 1] = comment - end - end - sorted[num2] = {} +for src, entries in pairs(sindex) do + for num1, entry in pairs(entries) do + for num2, entry2 in pairs(entries) do + if entry ~= entry2 and entry.data == entry2.data then + for num3, name in pairs(entry2.name) do + entry.name[#entry.name + 1] = name + end + if entry2.comment then + if not entry.comment then + entry.comment = entry2.comment + elseif entry.comment ~= entry2.comment then + entry.comment = entry.comment .. "\n" .. entry2.comment end end + sorted[num2] = {} + entries[num2] = {} end end end end -for num1, entry in ipairs(sorted) do +local nindex = {} + +for num1, entry in pairs(sorted) do if entry.name then - for num2, name in ipairs(entry.name) do + for num2, name in pairs(entry.name) do local curname = name:match("[^:]*") - for num3, entry2 in ipairs(sorted) do - if entry2.name and entry.src == entry2.src then - for num4, name2 in ipairs(entry2.name) do - if curname == name2:match("[^:]*") then - if entry ~= entry2 then - print(name, "duplicate name") - elseif num2 ~= num4 then - entry2.name[num4] = nil - end - end - end + if nindex[curname] then + if nindex[curname] == entry then + entry.name[num2] = "" + else + print(curname, "duplicate name") end + else + nindex[curname] = entry end end end end -- copyright 2010 Uli Schlachter GPLv2 -function stable_sort(list, comp) +local function stable_sort(list, comp) -- A table could contain non-integer keys which we have to ignore. local num = 0 for k, v in ipairs(list) do @@ -198,24 +197,21 @@ stable_sort(sorted, function(a,b) end end) -src = "error"; +local src = "error"; + +print(comments) for num, entry in ipairs(sorted) do - local function printall(table) - for num, str in ipairs(table) do - print(str) - end - end - if entry.src and entry.src ~= src then - print(";@s:" .. entry.src .. "\n") - src = entry.src - end - if entry.comment then - printall(entry.comment) - end if entry.name then - printall(entry.name) - printall(entry.data) + if entry.src and entry.src ~= src then + print(";@s:" .. entry.src .. "\n") + src = entry.src + end + if entry.comment then + print(entry.comment) + end + print(table.concat(entry.name, "\n")) + print(entry.data) + print("\n") end - print("\n") end diff --git a/src/devices/bus/psx/ctlrport.cpp b/src/devices/bus/psx/ctlrport.cpp index 2c9dd6ee957..084d5344b64 100644 --- a/src/devices/bus/psx/ctlrport.cpp +++ b/src/devices/bus/psx/ctlrport.cpp @@ -39,7 +39,8 @@ void psx_controller_port_device::disable_card(bool state) psxcontrollerports_device::psxcontrollerports_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PSXCONTROLLERPORTS, tag, owner, clock), - m_port0(nullptr), m_port1(nullptr), + m_port0(*this, "port0"), + m_port1(*this, "port1"), m_dsr_handler(*this), m_rxd_handler(*this) { @@ -50,8 +51,6 @@ void psxcontrollerports_device::device_start() m_dsr_handler.resolve_safe(); m_rxd_handler.resolve_safe(); - m_port0 = machine().device("port1"); - m_port1 = machine().device("port2"); m_port0->setup_ack_cb(psx_controller_port_device::void_cb(&psxcontrollerports_device::ack, this)); m_port1->setup_ack_cb(psx_controller_port_device::void_cb(&psxcontrollerports_device::ack, this)); } diff --git a/src/devices/bus/psx/ctlrport.h b/src/devices/bus/psx/ctlrport.h index 3c6a44da0eb..29c8f38b604 100644 --- a/src/devices/bus/psx/ctlrport.h +++ b/src/devices/bus/psx/ctlrport.h @@ -105,8 +105,8 @@ protected: virtual void device_start() override; private: - psx_controller_port_device *m_port0; - psx_controller_port_device *m_port1; + required_device m_port0; + required_device m_port1; devcb_write_line m_dsr_handler; devcb_write_line m_rxd_handler; -- cgit v1.2.3