From 325edc32f7440f843230c5146e398219e16c4c5f Mon Sep 17 00:00:00 2001 From: Almie Date: Thu, 19 Dec 2024 15:55:51 -0800 Subject: [PATCH] optimizing validate_element for faster loading of large dmx files --- io_scene_valvesource/datamodel.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/io_scene_valvesource/datamodel.py b/io_scene_valvesource/datamodel.py index 3cd8a5b..d49918e 100644 --- a/io_scene_valvesource/datamodel.py +++ b/io_scene_valvesource/datamodel.py @@ -569,6 +569,8 @@ def __init__(self,format,format_ver): self.format_ver = format_ver self.__elements = [] + self.__elements_set = set() + self.__elements_placeholders_set = set() self.__prefix_attributes = Element(self,"") self.root = None self.allow_random_ids = True @@ -579,6 +581,11 @@ def __repr__(self): def validate_element(self,elem): if elem._is_placeholder: return + + if not elem in self.__elements_set: + return + if elem in self.__elements_placeholders_set: + return try: collision = self.elements[self.elements.index(elem)] @@ -594,6 +601,10 @@ def add_element(self,name,elemtype="DmElement",id=None,_is_placeholder=False): elem = Element(self,name,elemtype,id,_is_placeholder) self.validate_element(elem) self.elements.append(elem) + if _is_placeholder: + self.__elements_placeholders_set.add(elem) + else: + self.__elements_set.add(elem) elem.datamodel = self if len(self.elements) == 1: self.root = elem return elem