@@ -105,8 +105,8 @@ def memprefix(prefix, memories, done):
105
105
done .add (memory .huid )
106
106
107
107
108
- class AutoCSR :
109
- def get_memories (self ):
108
+ def _make_gatherer ( method , cls , prefix_cb ) :
109
+ def gatherer (self ):
110
110
try :
111
111
exclude = self .autocsr_exclude
112
112
except AttributeError :
@@ -118,30 +118,16 @@ def get_memories(self):
118
118
r = []
119
119
for k , v in xdir (self , True ):
120
120
if k not in exclude :
121
- if isinstance (v , Memory ):
121
+ if isinstance (v , cls ):
122
122
r .append (v )
123
- elif hasattr (v , "get_memories" ) and callable (v . get_memories ):
124
- memories = v . get_memories ()
125
- memprefix (k + "_" , memories , prefixed )
126
- r += memories
123
+ elif hasattr (v , method ) and callable (getattr ( v , method ) ):
124
+ items = getattr ( v , method ) ()
125
+ prefix_cb (k + "_" , items , prefixed )
126
+ r += items
127
127
return sorted (r , key = lambda x : x .huid )
128
+ return gatherer
128
129
129
- def get_csrs (self ):
130
- try :
131
- exclude = self .autocsr_exclude
132
- except AttributeError :
133
- exclude = {}
134
- try :
135
- prefixed = self .__prefixed
136
- except AttributeError :
137
- prefixed = self .__prefixed = set ()
138
- r = []
139
- for k , v in xdir (self , True ):
140
- if k not in exclude :
141
- if isinstance (v , _CSRBase ):
142
- r .append (v )
143
- elif hasattr (v , "get_csrs" ) and callable (v .get_csrs ):
144
- csrs = v .get_csrs ()
145
- csrprefix (k + "_" , csrs , prefixed )
146
- r += csrs
147
- return sorted (r , key = lambda x : x .huid )
130
+
131
+ class AutoCSR :
132
+ get_memories = _make_gatherer ("get_memories" , Memory , memprefix )
133
+ get_csrs = _make_gatherer ("get_csrs" , _CSRBase , csrprefix )
0 commit comments