Skip to content

Commit 348844b

Browse files
committed
refactor: enable stability analysis on tree mapreducer
1 parent c7ba7fc commit 348844b

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

src/base.jl

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ function tree_mapreduce(
103103
if sharing && RT != Undefined
104104
id_map = allocate_id_map(tree, RT)
105105
reducer = TreeMapreducer(Val(2), id_map, f_leaf, f_branch, op, f_on_shared)
106-
return reducer(tree)
106+
return call_mapreducer(reducer, tree)
107107
else
108108
reducer = TreeMapreducer(Val(2), nothing, f_leaf, f_branch, op, f_on_shared)
109-
return reducer(tree)
109+
return call_mapreducer(reducer, tree)
110110
end
111111
end
112112

@@ -121,29 +121,36 @@ struct TreeMapreducer{
121121
f_on_shared::H
122122
end
123123

124-
function (mapreducer::TreeMapreducer{2,Nothing})(tree::AbstractNode)
124+
function call_mapreducer(mapreducer::TreeMapreducer{2,Nothing}, tree::AbstractNode)
125125
if tree.degree == 0
126126
return mapreducer.f_leaf(tree)
127127
elseif tree.degree == 1
128-
return mapreducer.op(mapreducer.f_branch(tree), mapreducer(tree.l))
128+
return mapreducer.op(mapreducer.f_branch(tree), call_mapreducer(mapreducer, tree.l))
129129
else
130130
return mapreducer.op(
131-
mapreducer.f_branch(tree), mapreducer(tree.l), mapreducer(tree.r)
131+
mapreducer.f_branch(tree),
132+
call_mapreducer(mapreducer, tree.l),
133+
call_mapreducer(mapreducer, tree.r),
132134
)
133135
end
134136
end
135-
function (mapreducer::TreeMapreducer{2,Dict})(tree::AbstractNode)
137+
function call_mapreducer(mapreducer::TreeMapreducer{2,<:Dict}, tree::AbstractNode)
136138
key = objectid(tree)
137139
is_cached = haskey(mapreducer.id_map, key)
138140
if is_cached
139-
return mapreducer.f_on_shared(@inbounds(mapreducer.id_map[key]), true)
141+
result = @inbounds(mapreducer.id_map[key])
142+
return mapreducer.f_on_shared(result, true)
140143
else
141144
result = if tree.degree == 0
142145
mapreducer.f_leaf(tree)
143146
elseif tree.degree == 1
144-
mapreducer.op(mapreducer.f_branch(tree), mapreducer(tree.l))
147+
mapreducer.op(mapreducer.f_branch(tree), call_mapreducer(mapreducer, tree.l))
145148
else
146-
mapreducer.op(mapreducer.f_branch(tree), mapreducer(tree.l), mapreducer(tree.r))
149+
mapreducer.op(
150+
mapreducer.f_branch(tree),
151+
call_mapreducer(mapreducer, tree.l),
152+
call_mapreducer(mapreducer, tree.r),
153+
)
147154
end
148155
mapreducer.id_map[key] = result
149156
return mapreducer.f_on_shared(result, false)

0 commit comments

Comments
 (0)