///|
pub let array_view_methods : Map[String, RuntimeFunction] = {
  "length": array_view_length_fn,
  "swap": array_view_swap_fn,
}

///|
/// 数组长度
let array_view_length_fn : RuntimeFunction = ctx => match ctx.args {
  [{ val: ArrayView(arr), .. }] => Int(arr.length())
  _ => Unit
}

///|
/// 数组交换
let array_view_swap_fn : RuntimeFunction = ctx => match ctx.args {
  [{ val: ArrayView(arr), .. }, { val: Int(i), .. }, { val: Int(j), .. }] => {
    arr.swap(i, j)
    Unit
  }
  _ => Unit
}

///|
fn[T] ArrayView::buf(self : ArrayView[T]) -> UninitializedArray[T] = "%arrayview.buf"

///|
fn[T] ArrayView::start(self : ArrayView[T]) -> Int = "%arrayview.start"

///|
fn[T] ArrayView::len(self : ArrayView[T]) -> Int = "%arrayview.len"

///|
/// ArrayView start 方法 - 返回起始索引
let array_view_buf_fn : RuntimeFunction = ctx => match ctx.args {
  [{ val: ArrayView(arr), .. }] => UninitializedArray(arr.buf())
  _ => Unit
}

///|
/// ArrayView start 方法 - 返回起始索引
let array_view_start_fn : RuntimeFunction = ctx => match ctx.args {
  [{ val: ArrayView(arr), .. }] => Int(arr.start())
  _ => Unit
}

///|
/// ArrayView len 方法
let array_view_len_fn : RuntimeFunction = ctx => match ctx.args {
  [{ val: ArrayView(arr), .. }] => Int(arr.len())
  _ => Unit
}