summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2018-05-20 14:56:47 -0500
committer cracyc <cracyc@users.noreply.github.com>2018-05-20 14:56:47 -0500
commit1092f2009b8b9d9653d0daa678e6ca30ac121f79 (patch)
tree18ca4f00f8a70f24f7b5fd04541516f41b6d4787
parent09ab2226587fd622a5b73be21b88e4cad69adbd7 (diff)
psx/ctlrport: use required_device (nw)
sort_hiscore: make it much faster (nw)
-rw-r--r--plugins/hiscore/sort_hiscore.lua108
-rw-r--r--src/devices/bus/psx/ctlrport.cpp5
-rw-r--r--src/devices/bus/psx/ctlrport.h4
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<psx_controller_port_device>("port1");
- m_port1 = machine().device<psx_controller_port_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<psx_controller_port_device> m_port0;
+ required_device<psx_controller_port_device> m_port1;
devcb_write_line m_dsr_handler;
devcb_write_line m_rxd_handler;