Skip to content

Commit 0514c90

Browse files
committed
refactor: more generic set_node! implementation
1 parent 7689999 commit 0514c90

File tree

2 files changed

+28
-26
lines changed

2 files changed

+28
-26
lines changed

src/Node.jl

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -420,17 +420,25 @@ Set every field of `tree` equal to the corresponding field of `new_tree`.
420420
function set_node!(tree::AbstractExpressionNode, new_tree::AbstractExpressionNode)
421421
tree.degree = new_tree.degree
422422
if new_tree.degree == 0
423-
tree.constant = new_tree.constant
424-
if new_tree.constant
425-
tree.val = new_tree.val::eltype(new_tree)
426-
else
427-
tree.feature = new_tree.feature
428-
end
423+
set_leaf!(tree, new_tree)
429424
else
430-
tree.op = new_tree.op
431-
set_children!(tree, get_children(new_tree))
425+
set_branch!(tree, new_tree)
432426
end
433427
return nothing
434428
end
429+
function set_leaf!(tree::AbstractExpressionNode, new_leaf::AbstractExpressionNode)
430+
tree.constant = new_leaf.constant
431+
if new_leaf.constant
432+
tree.val = new_leaf.val::eltype(new_leaf)
433+
else
434+
tree.feature = new_leaf.feature
435+
end
436+
return nothing
437+
end
438+
function set_branch!(tree::AbstractExpressionNode, new_branch::AbstractExpressionNode)
439+
tree.op = new_branch.op
440+
set_children!(tree, get_children(new_branch))
441+
return nothing
442+
end
435443

436444
end

src/ParametricExpression.jl

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import ..NodeModule:
2121
leaf_convert,
2222
leaf_hash,
2323
leaf_equal,
24-
set_node!,
24+
set_leaf!,
2525
@make_accessors
2626
import ..NodePreallocationModule: copy_into!, allocate_container
2727
import ..NodeUtilsModule:
@@ -145,24 +145,18 @@ function leaf_copy(t::ParametricNode{T}) where {T}
145145
return n
146146
end
147147
end
148-
function set_node!(tree::ParametricNode, new_tree::ParametricNode)
149-
tree.degree = (deg = new_tree.degree)
150-
if deg == 0
151-
if new_tree.constant
152-
tree.constant = true
153-
tree.val = new_tree.val
154-
elseif !new_tree.is_parameter
155-
tree.constant = false
156-
tree.is_parameter = false
157-
tree.feature = new_tree.feature
158-
else
159-
tree.constant = false
160-
tree.is_parameter = true
161-
tree.parameter = new_tree.parameter
162-
end
148+
function set_leaf!(tree::ParametricNode, new_leaf::ParametricNode)
149+
if new_leaf.constant
150+
tree.constant = true
151+
tree.val = new_leaf.val
152+
elseif !new_leaf.is_parameter
153+
tree.constant = false
154+
tree.is_parameter = false
155+
tree.feature = new_leaf.feature
163156
else
164-
tree.op = new_tree.op
165-
set_children!(tree, get_children(new_tree))
157+
tree.constant = false
158+
tree.is_parameter = true
159+
tree.parameter = new_leaf.parameter
166160
end
167161
return nothing
168162
end

0 commit comments

Comments
 (0)