Replace all table indices that were pos_to_string strings with node hashes.

Lua table string lookup consumes about 10 times more time than numeric indices
master
orwell96 2017-01-31 20:52:02 +01:00
parent 01f0d2c445
commit 78e936bea7
2 changed files with 14 additions and 7 deletions

View File

@ -5,7 +5,14 @@ local atc={}
-- ATC persistence table. advtrains.atc is created by init.lua when it loads the save file.
atc.controllers = {}
function atc.load_data(data)
atc.controllers = data and data.controllers or {}
local temp = data and data.controllers or {}
--transcode atc controller data to node hashes: table access times for numbers are far less than for strings
for pts, data in pairs(temp) do
if type(pts)="string" then
pts=minetest.hash_node_position(minetest.pos_to_string(pts))
end
atc.controllers[pts] = data
end
end
function atc.save_data()
return {controllers = atc.controllers}
@ -21,7 +28,7 @@ end
--general
function atc.send_command(pos)
local pts=minetest.pos_to_string(pos)
local pts=minetest.hash_node_position(ppos)
if atc.controllers[pts] then
--atprint("Called send_command at "..pts)
local train_id = advtrains.detector.on_node[pts]
@ -81,7 +88,7 @@ advtrains.register_tracks("default", {
after_dig_node=function(pos)
advtrains.invalidate_all_paths()
advtrains.ndb.clear(pos)
local pts=minetest.pos_to_string(pos)
local pts=minetest.hash_node_position(ppos)
atc.controllers[pts]=nil
end,
on_receive_fields = function(pos, formname, fields, player)
@ -115,7 +122,7 @@ advtrains.register_tracks("default", {
end
meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta))
local pts=minetest.pos_to_string(pos)
local pts=minetest.hash_node_position(pos)
local _, conn1=advtrains.get_rail_info_at(pos, advtrains.all_tracktypes)
atc.controllers[pts]={command=fields.command, arrowconn=conn1}
atc.send_command(pos)

View File

@ -389,19 +389,19 @@ advtrains.detector.on_node = {}
function advtrains.detector.enter_node(pos, train_id)
local ppos=advtrains.round_vector_floor_y(pos)
local pts=minetest.pos_to_string(ppos)
local pts=minetest.hash_node_position(ppos)
advtrains.detector.on_node[pts]=train_id
advtrains.detector.call_enter_callback(ppos, train_id)
end
function advtrains.detector.leave_node(pos, train_id)
local ppos=advtrains.round_vector_floor_y(pos)
local pts=minetest.pos_to_string(ppos)
local pts=minetest.hash_node_position(ppos)
advtrains.detector.on_node[pts]=nil
advtrains.detector.call_leave_callback(ppos, train_id)
end
function advtrains.detector.stay_node(pos, train_id)
local ppos=advtrains.round_vector_floor_y(pos)
local pts=minetest.pos_to_string(ppos)
local pts=minetest.hash_node_position(ppos)
advtrains.detector.on_node[pts]=train_id
end