Skip to content

Commit 2891cd6

Browse files
committed
Improve readability at cost of concise code
1 parent 3589ca6 commit 2891cd6

File tree

1 file changed

+40
-33
lines changed

1 file changed

+40
-33
lines changed

src/MatrixFields/field_name_dict.jl

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -359,40 +359,13 @@ function field_offset_and_type(
359359
)
360360
elseif S <: Geometry.AdjointAxisVector
361361
return field_offset_and_type(name_pair, T, fieldtype(S, 1), key_error)
362-
else
363-
child_name, remaining_field_chain =
364-
if name_pair[1] != @name() &&
365-
extract_first(name_pair[1]) in fieldnames(S)
366-
@inline (
367-
extract_first(name_pair[1]),
368-
(drop_first(name_pair[1]), name_pair[2]),
369-
)
370-
elseif name_pair[2] != @name() &&
371-
extract_first(name_pair[2]) in fieldnames(S)
372-
@inline (
373-
extract_first(name_pair[2]),
374-
(name_pair[1], drop_first(name_pair[2])),
375-
)
376-
elseif !any(isequal(@name()), name_pair) # implicit tensor structure
377-
(remaining_offset, end_type, apply_zero) =
378-
field_offset_and_type(
379-
(drop_first(name_pair[1]), drop_first(name_pair[2])),
380-
T,
381-
S,
382-
key_error,
383-
)
384-
return (
385-
remaining_offset,
386-
end_type,
387-
extract_first(name_pair[1]) == extract_first(name_pair[2]) ?
388-
apply_zero : true,
389-
)
390-
else
391-
throw(key_error)
392-
end
393-
child_type = fieldtype(S, child_name)
362+
elseif name_pair[1] != @name() &&
363+
extract_first(name_pair[1]) in fieldnames(S)
364+
365+
remaining_field_chain = (drop_first(name_pair[1]), name_pair[2])
366+
child_type = fieldtype(S, extract_first(name_pair[1]))
394367
field_index = unrolled_filter(
395-
i -> fieldname(S, i) == child_name,
368+
i -> fieldname(S, i) == extract_first(name_pair[1]),
396369
1:fieldcount(S),
397370
)[1]
398371
(remaining_offset, end_type, apply_zero) = field_offset_and_type(
@@ -406,7 +379,41 @@ function field_offset_and_type(
406379
end_type,
407380
apply_zero,
408381
)
382+
elseif name_pair[2] != @name() &&
383+
extract_first(name_pair[2]) in fieldnames(S)
409384

385+
remaining_field_chain = name_pair[1], drop_first(name_pair[2])
386+
child_type = fieldtype(S, extract_first(name_pair[2]))
387+
field_index = unrolled_filter(
388+
i -> fieldname(S, i) == extract_first(name_pair[2]),
389+
1:fieldcount(S),
390+
)[1]
391+
(remaining_offset, end_type, apply_zero) = field_offset_and_type(
392+
remaining_field_chain,
393+
T,
394+
child_type,
395+
key_error,
396+
)
397+
return (
398+
DataLayouts.fieldtypeoffset(T, S, field_index) + remaining_offset,
399+
end_type,
400+
apply_zero,
401+
)
402+
elseif !any(isequal(@name()), name_pair) # implicit tensor structure
403+
(remaining_offset, end_type, apply_zero) = field_offset_and_type(
404+
(drop_first(name_pair[1]), drop_first(name_pair[2])),
405+
T,
406+
S,
407+
key_error,
408+
)
409+
return (
410+
remaining_offset,
411+
end_type,
412+
extract_first(name_pair[1]) == extract_first(name_pair[2]) ?
413+
apply_zero : true,
414+
)
415+
else
416+
throw(key_error)
410417
end
411418
end
412419
if hasfield(Method, :recursion_relation)

0 commit comments

Comments
 (0)