@@ -128,15 +128,18 @@ end
128128
129129Adapt. 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)
140143end
141144
142145Base. getindex (t:: MultiplexTraces{names} , I:: Int ) where {names} = NamedTuple {names} ((t. trace[I], t. trace[I+ 1 ]))
@@ -180,12 +183,16 @@ function Traces(; kw...)
180183end
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
190197end
191198
0 commit comments