Skip to content

Commit 159f118

Browse files
pieverSimonDanisch
andauthored
remove generated rect method (#165)
Co-authored-by: Simon <[email protected]>
1 parent 83f9abd commit 159f118

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

src/primitives/rectangles.jl

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,11 @@ Rect constructor for individually specified intervals.
9090
e.g. Rect(0,0,1,2) has origin == Vec(0,0) and
9191
width == Vec(1,2)
9292
"""
93-
@generated function Rect(vals::Number...)
94-
# Generated so we get goodish codegen on each signature
95-
n = length(vals)
96-
@assert iseven(n)
97-
mid = div(n, 2)
98-
v1 = Expr(:call, :Vec)
99-
v2 = Expr(:call, :Vec)
100-
# TODO this can be inbounds
101-
append!(v1.args, [:(vals[$i]) for i in 1:mid])
102-
append!(v2.args, [:(vals[$i]) for i in (mid + 1):length(vals)])
103-
return Expr(:call, :Rect, v1, v2)
93+
function Rect(vals::Vararg{Number, N}) where {N}
94+
M, r = fldmod(N, 2)
95+
(r == 0) || throw(ArgumentError("number of arguments must be even"))
96+
origin, widths = ntuple(i -> vals[i], M), ntuple(i -> vals[i+M], M)
97+
return Rect(Vec(origin), Vec(widths))
10498
end
10599

106100
Rect3(a::Vararg{Number,6}) = Rect3(Vec{3}(a[1], a[2], a[3]), Vec{3}(a[4], a[5], a[6]))

test/geometrytypes.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,4 +312,9 @@ end
312312
rect2 = Rect(0.0, 0.0, 2.0, 3.0)
313313
@test finishes(rect1, rect2)
314314

315+
rect1 = @inferred Rect(1, 2, 3, 4, 5, 6, 7, 8)
316+
rect2 = Rect(Vec(1, 2, 3, 4), Vec(5, 6, 7, 8))
317+
@test rect1 == rect2
318+
319+
@test_throws ArgumentError Rect(1, 2, 3)
315320
end

0 commit comments

Comments
 (0)