Mercurial > repos > public > sbplib_julia
changeset 123:5df4ccb19476 cell_based_test
Undo changes of 3560f54e3eb3 and change to result a little bit to avoid allocations.
Trying different signatres reveals some strange interactions with julias dispatch:
allocate: getrange(gridsize::Integer, closuresize::Integer, region::Type{<:Region})
no allocate: getrange(gridsize::Integer, closuresize::Integer, region::R) where R
allocate: getrange(gridsize::Integer, closuresize::Integer, region::R) where R <: Type{<:Region}
no allocate: getrange(gridsize::Integer, closuresize::Integer, region::DataType)
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 13 Feb 2019 10:58:57 +0100 |
parents | 6c6979ff17f4 |
children | 22642722a8ec |
files | index.jl |
diffstat | 1 files changed, 12 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/index.jl Tue Feb 12 15:18:18 2019 +0100 +++ b/index.jl Wed Feb 13 10:58:57 2019 +0100 @@ -48,6 +48,15 @@ return CartesianIndices(regions) end -getrange(gridsize::Integer, closuresize::Integer, ::Type{Lower} ) = 1:closuresize -getrange(gridsize::Integer, closuresize::Integer, ::Type{Interior}) = (closuresize+1):(gridsize - closuresize) -getrange(gridsize::Integer, closuresize::Integer, ::Type{Upper} ) = (gridsize - closuresize + 1):gridsize +function getrange(gridsize::Integer, closuresize::Integer, region::DataType) + if region == Lower + r = 1:closuresize + elseif region == Interior + r = (closuresize+1):(gridsize - closuresize) + elseif region == Upper + r = (gridsize - closuresize + 1):gridsize + else + error("Unspecified region") + end + return r +end