From 84133a10df9f0c7d0d11e0ece8b5603e44208185 Mon Sep 17 00:00:00 2001
From: Christopher Head <chead@chead.ca>
Date: Sun, 19 Feb 2017 15:15:00 -0800
Subject: Use `minetest.hash_node_position` for searches.

Previously, Digilines used concatenations of X/Y/Z coordinates into
strings as keys to check for repeatedly visiting the same node during a
graph search. Replace them with integer keys generated by
`minetest.hash_node_position`, which should be more efficient.
---
 init.lua     | 2 +-
 internal.lua | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/init.lua b/init.lua
index 2f48a73..bffd4e7 100644
--- a/init.lua
+++ b/init.lua
@@ -9,7 +9,7 @@ dofile(modpath .. "/wire_std.lua")
 
 function digiline:receptor_send(pos, rules, channel, msg)
 	local checked = {}
-	checked[tostring(pos.x).."_"..tostring(pos.y).."_"..tostring(pos.z)] = true -- exclude itself
+	checked[minetest.hash_node_position(pos)] = true -- exclude itself
 	for _,rule in ipairs(rules) do
 		if digiline:rules_link(pos, digiline:addPosRule(pos, rule)) then
 			digiline:transmit(digiline:addPosRule(pos, rule), channel, msg, checked)
diff --git a/internal.lua b/internal.lua
index 96f84e7..45cd5d7 100644
--- a/internal.lua
+++ b/internal.lua
@@ -105,7 +105,7 @@ function digiline:transmit(pos, channel, msg, checked)
 				for _, rule in ipairs(rules) do
 					local nextPos = digiline:addPosRule(curPos, rule)
 					if digiline:rules_link(curPos, nextPos) then
-						local checkedID = tostring(nextPos.x) .. "_" .. tostring(nextPos.y) .. "_" .. tostring(nextPos.z)
+						local checkedID = minetest.hash_node_position(nextPos)
 						if not checked[checkedID] then
 							checked[checkedID] = true
 							queue_enqueue(queue, nextPos)
-- 
cgit v1.2.3