From 9601d6e28b4a6cc8099f8aa059121965ea4c6719 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Thu, 16 Aug 2018 19:32:03 -0400 Subject: [PATCH] Optimize `find_key` by using a hash map --- korman/exporter/manager.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/korman/exporter/manager.py b/korman/exporter/manager.py index e331aa8..06c4360 100644 --- a/korman/exporter/manager.py +++ b/korman/exporter/manager.py @@ -51,6 +51,7 @@ class ExportManager: self._nodes = {} self._pages = {} + self._keys = {} # cheap inheritance for i in dir(self.mgr): @@ -63,6 +64,12 @@ class ExportManager: self._age_info = info self.mgr.AddAge(info) + def AddObject(self, location, obj): + """Overloads the plResManager AddObject so we can insert the object into our hashtable""" + key = obj.key + self._keys[(location, obj.__class__, key.name)] = key + self.mgr.AddObject(location, obj) + def add_object(self, pl, name=None, bl=None, loc=None, so=None): """Automates adding a converted Blender object to our Plasma Resource Manager""" assert (bl or loc or so) @@ -85,7 +92,7 @@ class ExportManager: name = so.key.name pl = pl(name) - self.mgr.AddObject(location, pl) + self.AddObject(location, pl) node = self._nodes[location] if node: # All objects must be in the scene node if isinstance(pl, plSceneObject): @@ -191,11 +198,7 @@ class ExportManager: else: name = so.key.name - index = plFactory.ClassIndex(pClass.__name__) - for key in self.mgr.getKeys(location, index): - if name == key.name: - return key - return None + return self._keys.get((location, pClass, name), None) def find_create_object(self, pClass, bl=None, name=None, so=None): key = self.find_key(pClass, bl, name, so)