Mercurial > repos > public > sbplib_julia
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 |