Revision: 1102
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1102&view=rev
Author: roman_yakovenko
Date: 2007-08-17 22:25:18 -0700 (Fri, 17 Aug 2007)
Log Message:
-----------
adding caching for recursive_base and recursive_derived lists optimization
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/class_declaration.py
Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-08-18 05:21:30 UTC (rev 1101)
+++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-08-18 05:25:18 UTC (rev 1102)
@@ -126,6 +126,8 @@
self._aliases = []
self._container_traits = None
self._container_traits_set = False
+ self._recursive_bases = None
+ self._recursive_derived = None
def _get_name_impl( self ):
if not self._name: #class with empty name
@@ -197,17 +199,19 @@
bases = property( _get_bases, _set_bases
, doc="list of L{base classes<hierarchy_info_t>}")
- def _get_recursive_bases(self):
- to_go = self.bases[:]
- all_bases = []
- while to_go:
- base = to_go.pop()
- if base not in all_bases:
- all_bases.append( base )
- to_go.extend( base.related_class.bases )
- return all_bases
- recursive_bases = property( _get_recursive_bases
- , doc="returns a list of all L{base classes<hierarchy_info_t>}")
+ @property
+ def recursive_bases(self):
+ """list of all L{base classes<hierarchy_info_t>}"""
+ if self._recursive_bases is None:
+ to_go = self.bases[:]
+ all_bases = []
+ while to_go:
+ base = to_go.pop()
+ if base not in all_bases:
+ all_bases.append( base )
+ to_go.extend( base.related_class.bases )
+ self._recursive_bases = all_bases
+ return self._recursive_bases
def _get_derived(self):
return self._derived
@@ -216,17 +220,19 @@
derived = property( _get_derived, _set_derived
, doc="list of L{derived classes<hierarchy_info_t>}")
- def _get_recursive_derived(self):
- to_go = self.derived[:]
- all_derived = []
- while to_go:
- derive = to_go.pop()
- if derive not in all_derived:
- all_derived.append( derive )
- to_go.extend( derive.related_class.derived )
- return all_derived
- recursive_derived = property( _get_recursive_derived
- , doc="returns a list of all L{derive classes<hierarchy_info_t>}")
+ @property
+ def recursive_derived(self):
+ """list of all L{derive classes<hierarchy_info_t>}"""
+ if self._recursive_derived is None:
+ to_go = self.derived[:]
+ all_derived = []
+ while to_go:
+ derive = to_go.pop()
+ if derive not in all_derived:
+ all_derived.append( derive )
+ to_go.extend( derive.related_class.derived )
+ self._recursive_derived = all_derived
+ return self._recursive_derived
def _get_is_abstract(self):
return self._is_abstract
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|