fix bugs with queue inlining; inline gate queue as well

This commit is contained in:
Redo0
2021-06-05 19:12:21 -05:00
parent d3d03ce9a7
commit 00dc81948d
4 changed files with 30 additions and 16 deletions

View File

@@ -118,7 +118,7 @@ function Simulation.addgate(sim, gate)
Gate.preinit(gate)
Simulation.queuegateinit(sim, gate)
Simulation.queuegate(sim, gate)
Simulation.queuegate_safe(sim, gate)
end
function Simulation.removewire(sim, objref)
@@ -239,11 +239,14 @@ end
-- Logic Critical
function Simulation.queuegate(sim, gate)
sim.gatequeue[sim.num_gatequeue+1] = gate
sim.num_gatequeue = sim.num_gatequeue + 1
gate.in_queue = 1
end
function Simulation.queuegate_safe(sim, gate)
if gate.in_queue==0 then
--table.insert(sim.gatequeue, gate)
sim.gatequeue[sim.num_gatequeue+1] = gate
sim.num_gatequeue = sim.num_gatequeue + 1
gate.in_queue = 1
Simulation.queuegate(sim, gate)
end
end
@@ -272,6 +275,12 @@ function Simulation.queuegroup(sim, group)
group.in_queue = 1
end
function Simulation.queuegroup_safe(sim, group)
if group.in_queue==0 then
Simulation.queuegroup(sim, group)
end
end
function Simulation.dequeuegroup(sim, group)
if group.in_queue~=0 then
array_remove(sim.groupqueue, group, true)
@@ -309,13 +318,16 @@ function Simulation.ticklogic(sim)
local group = sim.groupqueue[i]
Group.update(group)
group.in_queue = 0
sim.groupqueue[i] = nil
end
--sim.groupqueue = {}
sim.num_groupqueue = 0
if sim.tickqueue[sim.current_tick] ~= nil then
for i, gate in pairs(sim.tickqueue[sim.current_tick]) do
Simulation.queuegate(sim, gate)
if gate.in_queue==0 then
Simulation.queuegate(sim, gate)
end
end
sim.tickqueue[sim.current_tick] = nil
end
@@ -324,6 +336,7 @@ function Simulation.ticklogic(sim)
local gate = sim.gatequeue[i]
gate.logic(gate)
gate.in_queue = 0
sim.gatequeue[i] = nil
end
--sim.gatequeue = {}
sim.num_gatequeue = 0