@@ -121,23 +121,9 @@ struct TreeMapreducer{
121121 f_on_shared:: H
122122end
123123
124- function call_mapreducer (mapreducer:: TreeMapreducer{2,Nothing} , tree:: AbstractNode )
125- if tree. degree == 0
126- return mapreducer. f_leaf (tree)
127- elseif tree. degree == 1
128- return mapreducer. op (mapreducer. f_branch (tree), call_mapreducer (mapreducer, tree. l))
129- else
130- return mapreducer. op (
131- mapreducer. f_branch (tree),
132- call_mapreducer (mapreducer, tree. l),
133- call_mapreducer (mapreducer, tree. r),
134- )
135- end
136- end
137- function call_mapreducer (mapreducer:: TreeMapreducer{2,<:Dict} , tree:: AbstractNode )
138- key = objectid (tree)
139- is_cached = haskey (mapreducer. id_map, key)
140- if is_cached
124+ function call_mapreducer (mapreducer:: TreeMapreducer{2,ID} , tree:: AbstractNode ) where {ID}
125+ key = ID <: Dict ? objectid (tree) : nothing
126+ if ID <: Dict && haskey (mapreducer. id_map, key)
141127 result = @inbounds (mapreducer. id_map[key])
142128 return mapreducer. f_on_shared (result, true )
143129 else
@@ -152,8 +138,12 @@ function call_mapreducer(mapreducer::TreeMapreducer{2,<:Dict}, tree::AbstractNod
152138 call_mapreducer (mapreducer, tree. r),
153139 )
154140 end
155- mapreducer. id_map[key] = result
156- return mapreducer. f_on_shared (result, false )
141+ if ID <: Dict
142+ mapreducer. id_map[key] = result
143+ return mapreducer. f_on_shared (result, false )
144+ else
145+ return result
146+ end
157147 end
158148end
159149
0 commit comments