Skip to content

Commit 47c789f

Browse files
More optimizations?
1 parent 220715f commit 47c789f

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

src/traces.jl

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,18 @@ end
128128

129129
Adapt.adapt_structure(to, t::MultiplexTraces{names}) where {names} = MultiplexTraces{names}(Adapt.adapt_structure(to, t.trace))
130130

131-
function Base.getindex(t::MultiplexTraces{names}, k::Symbol) where {names}
132-
a, b = names
133-
if k == a
134-
RelativeTrace{0,-1}(convert(AbstractTrace, t.trace))
135-
elseif k == b
136-
RelativeTrace{1,0}(convert(AbstractTrace, t.trace))
131+
Base.getindex(t::MultiplexTraces{names}, k::Symbol) where {names} = _getindex(t, Val(k))
132+
133+
@generated function _getindex(t::MultiplexTraces{names}, ::Val{k}) where {names,k}
134+
ex = :()
135+
if QuoteNode(names[1]) == QuoteNode(k)
136+
ex = :(RelativeTrace{0,-1}(t.trace))
137+
elseif QuoteNode(names[2]) == QuoteNode(k)
138+
ex = :(RelativeTrace{1,0}(t.trace))
137139
else
138-
throw(ArgumentError("unknown trace name: $k"))
140+
ex = :(throw(ArgumentError("unknown trace name: $k")))
139141
end
142+
return :($ex)
140143
end
141144

142145
Base.getindex(t::MultiplexTraces{names}, I::Int) where {names} = NamedTuple{names}((t.trace[I], t.trace[I+1]))
@@ -180,12 +183,16 @@ function Traces(; kw...)
180183
end
181184

182185

183-
function Base.getindex(ts::Traces, s::Symbol)
186+
Base.getindex(ts::Traces, s::Symbol) = Base.getindex(ts::Traces, Val(s))
187+
188+
function Base.getindex(ts::Traces, ::Val{s}) where {s}
184189
t = _gettrace(ts, Val(s))
185190
if t isa AbstractTrace
186191
t
187-
else
192+
elseif t isa MultiplexTraces
188193
t[s]
194+
else
195+
throw(ArgumentError("unknown trace name: $s"))
189196
end
190197
end
191198

0 commit comments

Comments
 (0)