Advertisement
Guest User

Untitled

a guest
Jul 24th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.55 KB | None | 0 0
  1. abstract type IdenticalElementArray{T,N} <: AbstractArray{T,N} end
  2.  
  3. Base.size(x::IdenticalElementArray) = x.dims
  4. Base.IndexStyle(x::IdenticalElementArray) = IndexLinear()
  5.  
  6. macro identicalelementarray(TypeName, elem)
  7. T = typeof(eval(elem))
  8.  
  9. esc(quote
  10. struct $TypeName{T,N} <: IdenticalElementArray{T,N}
  11. dims::NTuple{N,Int}
  12. end
  13.  
  14. ($TypeName)(dims...) = ($TypeName){$(typeof(elem)),length(dims)}(dims)
  15.  
  16. Base.getindex(x::$TypeName, idx...) = $elem
  17. end)
  18. end
  19.  
  20. @identicalelementarray Foo "foo"
  21.  
  22. Foo(1,2,3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement