Skip to content
Snippets Groups Projects
envelope.fut 3.75 KiB
Newer Older
type envelope_1d_t [n] = {
    west: [n]u8, -- 1
    east: [n]u8  -- 0
}

type envelope_2d_t [n][m][ty][tx] = {
    north_west: [ty][tx]u8,  -- 3
    west: [n][tx]u8,         -- 7
    south_west: [ty][tx]u8,  -- 6
    south: [ty][m]u8,        -- 4
    south_east: [ty][tx]u8,  -- 5
    east: [n][tx]u8,         -- 0
    north_east: [ty][tx]u8,  -- 2
    north: [ty][m]u8         -- 1
}

entry get_envelope_1d [n] (xs: [n]u8) (thickness: i64) : envelope_1d_t [thickness] =
baptiste.coudray's avatar
baptiste.coudray committed
    let west = xs[0:thickness] :> [thickness]u8
    let east = xs[n - thickness:] :> [thickness]u8
    in {west, east}
entry get_envelope_2d [n][m] (matrix: [n][m]u8) (thickness_y: i64) (thickness_x: i64): envelope_2d_t [n][m][thickness_y][thickness_x] =
baptiste.coudray's avatar
baptiste.coudray committed
    let north = matrix[0:thickness_y] :> [thickness_y][m]u8
baptiste.coudray's avatar
baptiste.coudray committed
    let north_west = matrix[0:thickness_y,0:thickness_x] :> [thickness_y][thickness_x]u8
    let north_east = matrix[0:thickness_y,m - thickness_x:m] :> [thickness_y][thickness_x]u8
baptiste.coudray's avatar
baptiste.coudray committed
    let south = matrix[n - thickness_y:] :> [thickness_y][m]u8
baptiste.coudray's avatar
baptiste.coudray committed
    let south_east = matrix[n - thickness_y:n,m - thickness_x:m] :> [thickness_y][thickness_x]u8
    let south_west = matrix[n - thickness_y:n,0:thickness_x] :> [thickness_y][thickness_x]u8
baptiste.coudray's avatar
baptiste.coudray committed
    let east = matrix[:,m - (thickness_x):] :> [n][thickness_x]u8
    let west = matrix[:,0:thickness_x] :> [n][thickness_x]u8
    in {north_west, west, south_west, south, south_east, east, north_east, north}

 -- entry get_envelope_3d [n][m][l] (cube:[n][m][l]u8) (thickness_y: i64) (thickness_x: i64) (thickness_z: i64):
 --    let north_front = matrix[0:thickness_y,:,0:thickness_z]
 --    let south_front = matrix[n - thickness_y:,:,0:thickness_z]

 --    let west_front = matrix[:,0:thickness_x:0:thickness_z]
 --    let east_front = matrix[:,m - (thickness_x):0:thickness_z]

 --    let north_west_front = matrix[0:thickness_y,0:thickness_x,0:thickness_z]
 --    let north_east_front = matrix[0:thickness_y,m - thickness_x:m,0:thickness_z]
 --    let south_east_front = matrix[n - thickness_y:n,m - thickness_x:m,0:thickness_z]
 --    let south_west_front = matrix[n - thickness_y:n,0:thickness_x,0:thickness_z]

 --    let north_back = matrix[0:thickness_y,:,0:l-thickness_z]
 --    let south_back = matrix[n - thickness_y:,:,0:l-thickness_z]

 --    let west_back = matrix[:,0:thickness_x:0:l-thickness_z]
 --    let east_back = matrix[:,m - (thickness_x):l-thickness_z]

 --    let north_west_back = matrix[0:thickness_y,0:thickness_x,l-thickness_z]
 --    let north_east_back = matrix[0:thickness_y,m - thickness_x:m,l-thickness_z]
 --    let south_east_back = matrix[n - thickness_y:n,m - thickness_x:m,l-thickness_z]
 --    let south_west_back = matrix[n - thickness_y:n,0:thickness_x,l-thickness_z]


 --   -- let north_right = matrix[0:thickness_y,m-1:m,:]
 --   -- let south_right = matrix[n - thickness_y:m-1:m,:]

 --   -- let west_back = matrix[:,0:thickness_x:0:l-thickness_z]
 --   -- let east_back = matrix[:,m - (thickness_x):l-thickness_z]

 --   -- let north_west_back = matrix[0:thickness_y,0:thickness_x,l-thickness_z]
 --   -- let north_east_back = matrix[0:thickness_y,m - thickness_x:m,l-thickness_z]
 --   -- let south_east_back = matrix[n - thickness_y:n,m - thickness_x:m,l-thickness_z]
 --   -- let south_west_back = matrix[n - thickness_y:n,0:thickness_x,l-thickness_z]


 --    in (north_west, west, south_west, south, south_east, east, north_east, north)

entry get_subdomain_1d [n] (xs: [n]u8) (x:i64) (dimensions: [1]i64) : []u8 =
    xs[x:x+dimensions[0]]

entry get_subdomain_2d [n][m] (matrix: [n][m]u8) (y:i64) (x:i64) (dimensions: [2]i64) : [][]u8 =
    matrix[y:y+dimensions[0],x:x+dimensions[1]]

entry get_subdomain_3d [n][m][l] (cube:[n][m][l]u8) (y:i64) (x:i64) (z:i64) (dimensions: [3]i64) : [][][]u8 =
    cube[y:y+dimensions[0],x:x+dimensions[1],z:z+dimensions[2]]