comparison RegionIndices/src/RegionIndices.jl @ 218:03375aa30edd package_refactor

Add Tests and exports to RegionIndices
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 26 Jun 2019 12:57:20 +0200
parents 08b07c6eeec7
children b3506cfbb9d8
comparison
equal deleted inserted replaced
217:4c62d0253bd4 218:03375aa30edd
3 abstract type Region end 3 abstract type Region end
4 struct Interior <: Region end 4 struct Interior <: Region end
5 struct Lower <: Region end 5 struct Lower <: Region end
6 struct Upper <: Region end 6 struct Upper <: Region end
7 struct Unknown <: Region end 7 struct Unknown <: Region end
8
9 export Region, Interior, Lower, Upper, Unknown
8 10
9 struct Index{R<:Region, T<:Integer} 11 struct Index{R<:Region, T<:Integer}
10 i::T 12 i::T
11 13
12 Index{R,T}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i) 14 Index{R,T}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i)
13 Index{R}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i) 15 Index{R}(i::T) where {R<:Region,T<:Integer} = new{R,T}(i)
14 Index(i::T, ::Type{R}) where {R<:Region,T<:Integer} = Index{R,T}(i) 16 Index(i::T, ::Type{R}) where {R<:Region,T<:Integer} = Index{R,T}(i)
15 Index(t::Tuple{T, DataType}) where {R<:Region,T<:Integer} = Index{t[2],T}(t[1]) # TBD: This is not very specific in what types are allowed in t[2]. Can this be fixed? 17 Index(t::Tuple{T, DataType}) where {R<:Region,T<:Integer} = Index{t[2],T}(t[1]) # TBD: This is not very specific in what types are allowed in t[2]. Can this be fixed?
16 end 18 end
19
20 export Index
17 21
18 # Index(R::Type{<:Region}) = Index{R} 22 # Index(R::Type{<:Region}) = Index{R}
19 23
20 ## Vill kunna skriva 24 ## Vill kunna skriva
21 ## IndexTupleType(Int, (Lower, Interior)) 25 ## IndexTupleType(Int, (Lower, Interior))
30 function Index(i::Integer, boundary_width::Integer, dim_size::Integer) 34 function Index(i::Integer, boundary_width::Integer, dim_size::Integer)
31 return Index{getregion(i,boundary_width,dim_size)}(i) 35 return Index{getregion(i,boundary_width,dim_size)}(i)
32 end 36 end
33 37
34 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t) 38 IndexTuple(t::Vararg{Tuple{T, DataType}}) where T<:Integer = Index.(t)
39 export IndexTuple
35 40
36 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types. 41 # TODO: Use the values of the region structs, e.g. Lower(), for the region parameter instead of the types.
37 # For example the following works: 42 # For example the following works:
38 # (Lower(),Upper()) isa NTuple{2, Region} -> true 43 # (Lower(),Upper()) isa NTuple{2, Region} -> true
39 # typeof((Lower(),Upper())) -> Tuple{Lower,Upper} 44 # typeof((Lower(),Upper())) -> Tuple{Lower,Upper}