Skip to content

Commit 1ed8721

Browse files
committed
refactor: small cleanup of array nodes
1 parent 8b8fa48 commit 1ed8721

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

src/ArrayNode.jl

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ struct ArrayNode{T,D,S} <: AbstractExpressionNode{T,D}
8080
idx::UInt16
8181
end
8282

83-
function Base.getproperty(n::ArrayNode{T,D,S}, k::Symbol) where {T,D,S}
83+
@inline function Base.getproperty(n::ArrayNode{T,D,S}, k::Symbol) where {T,D,S}
8484
tree = getfield(n, :tree)
8585
idx = getfield(n, :idx)
8686
nodes = getfield(tree, :nodes)
@@ -109,18 +109,20 @@ function Base.getproperty(n::ArrayNode{T,D,S}, k::Symbol) where {T,D,S}
109109
Nullable(false, ArrayNode{T,D,S}(tree, child_idx))
110110
end
111111
end
112-
elseif k == :l # Left child for compatibility
112+
elseif k == :l
113113
child_idx = @inbounds nodes.children[idx][1]
114-
return child_idx == 0 ? error("No left child") : ArrayNode{T,D,S}(tree, child_idx)
115-
elseif k == :r # Right child for compatibility
114+
child_idx == 0 && error("No left child")
115+
return ArrayNode{T,D,S}(tree, child_idx)
116+
elseif k == :r
116117
child_idx = @inbounds nodes.children[idx][2]
117-
return child_idx == 0 ? error("No right child") : ArrayNode{T,D,S}(tree, child_idx)
118+
child_idx == 0 && error("No right child")
119+
return ArrayNode{T,D,S}(tree, child_idx)
118120
else
119121
error("Unknown field $k")
120122
end
121123
end
122124

123-
function Base.setproperty!(n::ArrayNode{T,D,S}, k::Symbol, v) where {T,D,S}
125+
@inline function Base.setproperty!(n::ArrayNode{T,D,S}, k::Symbol, v) where {T,D,S}
124126
tree = getfield(n, :tree)
125127
idx = getfield(n, :idx)
126128
nodes = getfield(tree, :nodes)
@@ -136,11 +138,11 @@ function Base.setproperty!(n::ArrayNode{T,D,S}, k::Symbol, v) where {T,D,S}
136138
elseif k == :op
137139
@inbounds nodes.op[idx] = v
138140
elseif k == :l
139-
isa(v, ArrayNode) || error("Cannot set left child to non-ArrayNode")
141+
!isa(v, ArrayNode) && error("Cannot set left child to non-ArrayNode")
140142
children = nodes.children[idx]
141143
@inbounds nodes.children[idx] = (getfield(v, :idx), children[2:end]...)
142144
elseif k == :r
143-
isa(v, ArrayNode) || error("Cannot set right child to non-ArrayNode")
145+
!isa(v, ArrayNode) && error("Cannot set right child to non-ArrayNode")
144146
children = nodes.children[idx]
145147
@inbounds nodes.children[idx] = (children[1], getfield(v, :idx), children[3:end]...)
146148
else
@@ -150,15 +152,15 @@ function Base.setproperty!(n::ArrayNode{T,D,S}, k::Symbol, v) where {T,D,S}
150152
end
151153

152154
# Allocation management
153-
function allocate_node!(tree::ArrayTree)
155+
@inline function allocate_node!(tree::ArrayTree)
154156
tree.free_count == 0 && error("ArrayTree full")
155157
idx = tree.free_list[tree.free_count]
156158
tree.free_count -= 1
157159
tree.n_nodes += 1
158160
return idx
159161
end
160162

161-
function free_node!(tree::ArrayTree, idx::UInt16)
163+
@inline function free_node!(tree::ArrayTree, idx::UInt16)
162164
tree.free_count += 1
163165
tree.free_list[tree.free_count] = idx
164166
return tree.n_nodes -= 1
@@ -300,16 +302,6 @@ function copy_subtree!(dst::ArrayTree{T,D}, src::ArrayTree{T,D}, src_idx::UInt16
300302
return dst_idx
301303
end
302304

303-
# Core interface implementations
304-
Base.eltype(::Type{<:ArrayNode{T}}) where {T} = T
305-
Base.eltype(::ArrayNode{T}) where {T} = T
306-
307-
max_degree(::Type{<:ArrayNode}) = 2
308-
max_degree(::Type{<:ArrayNode{T,D}}) where {T,D} = D
309-
max_degree(n::ArrayNode) = max_degree(typeof(n))
310-
311-
preserve_sharing(::Type{<:ArrayNode}) = false
312-
313305
constructorof(::Type{<:ArrayNode}) = ArrayNode
314306
with_type_parameters(::Type{<:ArrayNode}, ::Type{T}) where {T} = ArrayNode{T,2}
315307
with_max_degree(::Type{<:ArrayNode{T,D}}, ::Val{D2}) where {T,D,D2} = ArrayNode{T,D2}
@@ -508,10 +500,10 @@ function tree_mapreduce(
508500
return mapreduce_impl(f, op, tree, getfield(n, :idx))
509501
end
510502

511-
function mapreduce_impl(f::F, op::G, tree::ArrayTree{T,D,S}, idx::UInt16) where {F,G,T,D,S}
503+
@inline function mapreduce_impl(f::F, op::G, tree::ArrayTree{T,D,S}, idx::UInt16) where {F,G,T,D,S}
512504
degree = @inbounds tree.nodes.degree[idx]
513505
node = ArrayNode{T,D,S}(tree, idx)
514-
result = f(node)
506+
result = @inline f(node)
515507

516508
if degree > 0
517509
child_results = ntuple(

0 commit comments

Comments
 (0)