mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Add RED.nodes.getNodeLinkCount to provide O(1) lookup of link count on node port
This commit is contained in:
parent
f86e743cce
commit
510a09ecba
@ -594,7 +594,9 @@ RED.nodes = (function() {
|
|||||||
}
|
}
|
||||||
allNodes.addNode(n);
|
allNodes.addNode(n);
|
||||||
if (!nodeLinks[n.id]) {
|
if (!nodeLinks[n.id]) {
|
||||||
nodeLinks[n.id] = {in:[],out:[]};
|
nodeLinks[n.id] = {
|
||||||
|
inCount:[],outCount:[],in:[],out:[]
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RED.events.emit('nodes:add',n);
|
RED.events.emit('nodes:add',n);
|
||||||
@ -604,15 +606,19 @@ RED.nodes = (function() {
|
|||||||
if (l.source) {
|
if (l.source) {
|
||||||
// Possible the node hasn't been added yet
|
// Possible the node hasn't been added yet
|
||||||
if (!nodeLinks[l.source.id]) {
|
if (!nodeLinks[l.source.id]) {
|
||||||
nodeLinks[l.source.id] = {in:[],out:[]};
|
nodeLinks[l.source.id] = {inCount:[],outCount:[],in:[],out:[]};
|
||||||
}
|
}
|
||||||
nodeLinks[l.source.id].out.push(l);
|
nodeLinks[l.source.id].out.push(l);
|
||||||
|
nodeLinks[l.source.id].outCount[l.sourcePort] = (nodeLinks[l.source.id].outCount[l.sourcePort] || 0) + 1
|
||||||
|
l.source.dirty = true;
|
||||||
}
|
}
|
||||||
if (l.target) {
|
if (l.target) {
|
||||||
if (!nodeLinks[l.target.id]) {
|
if (!nodeLinks[l.target.id]) {
|
||||||
nodeLinks[l.target.id] = {in:[],out:[]};
|
nodeLinks[l.target.id] = {inCount:[],outCount:[],in:[],out:[]};
|
||||||
}
|
}
|
||||||
nodeLinks[l.target.id].in.push(l);
|
nodeLinks[l.target.id].in.push(l);
|
||||||
|
nodeLinks[l.target.id].inCount[0] = (nodeLinks[l.target.id].inCount[0] || 0) + 1
|
||||||
|
l.target.dirty = true;
|
||||||
}
|
}
|
||||||
if (l.source.z === l.target.z && linkTabMap[l.source.z]) {
|
if (l.source.z === l.target.z && linkTabMap[l.source.z]) {
|
||||||
linkTabMap[l.source.z].push(l);
|
linkTabMap[l.source.z].push(l);
|
||||||
@ -761,15 +767,19 @@ RED.nodes = (function() {
|
|||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
links.splice(index,1);
|
links.splice(index,1);
|
||||||
if (l.source && nodeLinks[l.source.id]) {
|
if (l.source && nodeLinks[l.source.id]) {
|
||||||
|
l.source.dirty = true;
|
||||||
var sIndex = nodeLinks[l.source.id].out.indexOf(l)
|
var sIndex = nodeLinks[l.source.id].out.indexOf(l)
|
||||||
if (sIndex !== -1) {
|
if (sIndex !== -1) {
|
||||||
nodeLinks[l.source.id].out.splice(sIndex,1)
|
nodeLinks[l.source.id].out.splice(sIndex,1)
|
||||||
|
nodeLinks[l.source.id].outCount[l.sourcePort]--
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (l.target && nodeLinks[l.target.id]) {
|
if (l.target && nodeLinks[l.target.id]) {
|
||||||
|
l.target.dirty = true;
|
||||||
var tIndex = nodeLinks[l.target.id].in.indexOf(l)
|
var tIndex = nodeLinks[l.target.id].in.indexOf(l)
|
||||||
if (tIndex !== -1) {
|
if (tIndex !== -1) {
|
||||||
nodeLinks[l.target.id].in.splice(tIndex,1)
|
nodeLinks[l.target.id].in.splice(tIndex,1)
|
||||||
|
nodeLinks[l.target.id].inCount[0]--
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (l.source.z === l.target.z && linkTabMap[l.source.z]) {
|
if (l.source.z === l.target.z && linkTabMap[l.source.z]) {
|
||||||
@ -2706,6 +2716,16 @@ RED.nodes = (function() {
|
|||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
},
|
},
|
||||||
|
getNodeLinkCount: function(id,portType,index) {
|
||||||
|
if (nodeLinks[id]) {
|
||||||
|
if (portType === 1) {
|
||||||
|
return nodeLinks[id].inCount[index] || 0
|
||||||
|
} else {
|
||||||
|
return nodeLinks[id].outCount[index] || 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
addWorkspace: addWorkspace,
|
addWorkspace: addWorkspace,
|
||||||
removeWorkspace: removeWorkspace,
|
removeWorkspace: removeWorkspace,
|
||||||
getWorkspaceOrder: function() { return workspacesOrder },
|
getWorkspaceOrder: function() { return workspacesOrder },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user