--- a/plcopen/plcopen.py Thu Jun 06 16:02:46 2013 +0200
+++ b/plcopen/plcopen.py Thu Jun 06 17:03:19 2013 +0200
@@ -1751,6 +1751,17 @@
cls = PLCOpenClasses.get("body", None)
cls.currentExecutionOrderId = 0
+ cls.instances_dict = {} + setattr(cls, "_loadXMLTree", getattr(cls, "loadXMLTree")) + def loadXMLTree(self, *args, **kwargs): + self._loadXMLTree(*args, **kwargs) + if self.content["name"] in ["LD","FBD","SFC"]: + self.instances_dict = dict( + [(element["value"].getlocalId(), element) + for element in self.content["value"].getcontent()]) + setattr(cls, "loadXMLTree", loadXMLTree) def resetcurrentExecutionOrderId(self):
object.__setattr__(self, "currentExecutionOrderId", 0)
@@ -1825,7 +1836,9 @@
def appendcontentInstance(self, name, instance):
if self.content["name"] in ["LD","FBD","SFC"]:
- self.content["value"].appendcontent({"name" : name, "value" : instance})
+ element = {"name" : name, "value" : instance} + self.content["value"].appendcontent(element) + self.instances_dict[instance.getlocalId()] = element raise TypeError, _("%s body don't have instances!")%self.content["name"]
setattr(cls, "appendcontentInstance", appendcontentInstance)
@@ -1842,9 +1855,9 @@
def getcontentInstance(self, id):
if self.content["name"] in ["LD","FBD","SFC"]:
- for element in self.content["value"].getcontent():
- if element["value"].getlocalId() == id:
- return element["value"]
+ instance = self.instances_dict.get(id, None) + if instance is not None: + return instance["value"] raise TypeError, _("%s body don't have instances!")%self.content["name"]
@@ -1852,9 +1865,9 @@
def getcontentRandomInstance(self, exclude):
if self.content["name"] in ["LD","FBD","SFC"]:
- for element in self.content["value"].getcontent():
- if element["value"].getlocalId() not in exclude:
- return element["value"]
+ ids = self.instances_dict.viewkeys() - exclude + return self.instances_dict[ids.pop()]["value"] raise TypeError, _("%s body don't have instances!")%self.content["name"]
@@ -1871,15 +1884,10 @@
def removecontentInstance(self, id):
if self.content["name"] in ["LD","FBD","SFC"]:
- elements = self.content["value"].getcontent()
- while i < len(elements) and not removed:
- if elements[i]["value"].getlocalId() == id:
- self.content["value"].removecontent(i)
+ element = self.instances_dict.get(id, None) + if element is not None: + self.content["value"].getcontent().remove(element) raise ValueError, _("Instance with id %d doesn't exist!")%id
raise TypeError, "%s body don't have instances!"%self.content["name"]