MoYeArray

Index

MoYe.ArrayEngineType
ArrayEngine{T, L} <: DenseVector{T}

A owning and mutable vector of type T with static length L.

Examples

julia> x = ArrayEngine{Float32}(undef, _3)
3-element ArrayEngine{Float32, 3}:
 -9.8271385f-36
  7.57f-43
 -9.8271385f-36

julia> x[1] = 10f0
10.0f0

julia> x
3-element ArrayEngine{Float32, 3}:
 10.0
  7.57f-43
 -9.8271385f-36
source
MoYe.MoYeArrayType
MoYeArray(engine::Engine, layout::Layout)
MoYeArray{T}(::UndefInitializer, layout::StaticLayout)
MoYeArray(ptr, layout::Layout)

Create a MoYeArray from an engine and a layout. See also ArrayEngine and ViewEngine.

Examples

julia> slayout = @Layout (5, 2);

julia> array_engine = ArrayEngine{Float32}(undef, cosize(slayout)); # owning array

julia> MoYeArray(array_engine, slayout)
5×2 MoYeArray{Float32, 2, ArrayEngine{Float32, 10}, Layout{2, Tuple{Static.StaticInt{5}, Static.StaticInt{2}}, Tuple{Static.StaticInt{1}, Static.StaticInt{5}}}}:
 -3.24118f12   0.0
  7.57f-43     0.0
  0.0          0.0
  0.0          0.0
  7.89217f-40  0.0

julia>  MoYeArray{Float32}(undef, slayout)
5×2 MoYeArray{Float32, 2, ArrayEngine{Float32, 10}, Layout{2, Tuple{Static.StaticInt{5}, Static.StaticInt{2}}, Tuple{Static.StaticInt{1}, Static.StaticInt{5}}}}:
  4.0f-45    7.57f-43
  0.0        0.0
 -1.81623f7  0.0
  7.57f-43   0.0
 -1.81623f7  0.0

julia> A = ones(10);

julia> MoYeArray(pointer(A), slayout) # non-owning array
5×2 MoYeArray{Float64, 2, ViewEngine{Float64, Ptr{Float64}}, Layout{2, Tuple{Static.StaticInt{5}, Static.StaticInt{2}}, Tuple{Static.StaticInt{1}, Static.StaticInt{5}}}}:
 1.0  1.0
 1.0  1.0
 1.0  1.0
 1.0  1.0
 1.0  1.0

julia> function test_alloc()          # when powered by a ArrayEngine, MoYeArray is stack-allocated
    slayout = @Layout (2, 3)          # and mutable
    x = MoYeArray{Float32}(undef, slayout)
    fill!(x, 1.0f0)
    return sum(x)
end
test_alloc (generic function with 2 methods)

julia> @allocated(test_alloc())
0
source
MoYe.recastFunction
recast(::Type{NewType}, x::MoYeArray{OldType}) -> MoYeArray{NewType}

Recast the element type of a MoYeArray. This is similar to Base.reinterpret, but dose all the computation at compile time, if possible.

Examples

julia> x = MoYeArray{Int32}(undef, @Layout((2,3)))
2×3 MoYeArray{Int32, 2, ArrayEngine{Int32, 6}, Layout{2, Tuple{Static.StaticInt{2}, Static.StaticInt{3}}, Tuple{Static.StaticInt{1}, Static.StaticInt{2}}}}:
 -1948408944           0  2
         514  -268435456  0

julia> x2 = recast(Int16, x)
4×3 MoYeArray{Int16, 2, ViewEngine{Int16, Ptr{Int16}}, Layout{2, Tuple{Static.StaticInt{4}, Static.StaticInt{3}}, Tuple{Static.StaticInt{1}, Static.StaticInt{4}}}}:
 -23664      0  2
 -29731      0  0
    514      0  0
      0  -4096  0

julia> x3 = recast(Int64, x)
1×3 MoYeArray{Int64, 2, ViewEngine{Int64, Ptr{Int64}}, Layout{2, Tuple{Static.StaticInt{1}, Static.StaticInt{3}}, Tuple{Static.StaticInt{1}, Static.StaticInt{1}}}}:
 2209959748496  -1152921504606846976  2
source