comparison index.jl @ 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 3560f54e3eb3
children ce56727e4232
comparison
equal deleted inserted replaced
122:6c6979ff17f4 123:5df4ccb19476
46 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::NTuple{Dim,Integer}, region::NTuple{Dim,DataType}) where Dim 46 function regionindices(gridsize::NTuple{Dim,Integer}, closuresize::NTuple{Dim,Integer}, region::NTuple{Dim,DataType}) where Dim
47 regions = map(getrange,gridsize,closuresize,region) 47 regions = map(getrange,gridsize,closuresize,region)
48 return CartesianIndices(regions) 48 return CartesianIndices(regions)
49 end 49 end
50 50
51 getrange(gridsize::Integer, closuresize::Integer, ::Type{Lower} ) = 1:closuresize 51 function getrange(gridsize::Integer, closuresize::Integer, region::DataType)
52 getrange(gridsize::Integer, closuresize::Integer, ::Type{Interior}) = (closuresize+1):(gridsize - closuresize) 52 if region == Lower
53 getrange(gridsize::Integer, closuresize::Integer, ::Type{Upper} ) = (gridsize - closuresize + 1):gridsize 53 r = 1:closuresize
54 elseif region == Interior
55 r = (closuresize+1):(gridsize - closuresize)
56 elseif region == Upper
57 r = (gridsize - closuresize + 1):gridsize
58 else
59 error("Unspecified region")
60 end
61 return r
62 end