ATSLIB/libats/gfarray

This package contains various functions for manipulating generic arrays that are assigned the fully indexed array type.
  • gfarray_v
  • gfarray_v_sing
  • gfarray_v_unsing
  • gfarray_v_split
  • gfarray_v_unsplit
  • gfarray_v_extend
  • gfarray_v_unextend
  • gfarray_get_at
  • gfarray_set_at
  • gfarray_exch_at

  • gfarray_v

    Synopsis

    dataview
    gfarray_v
    (
      a:vt@ype+, addr, ilist
    ) =
      | {l:addr}
        gfarray_v_nil (a, l, ilist_nil) of ()
      | {x:int}{xs:ilist}{l:addr}
        gfarray_v_cons (a, l, ilist_cons (x, xs)) of
          (stamped_vt (a, x) @ l, gfarray_v (a, l+sizeof(a), xs))

    gfarray_v_sing

    Synopsis

    prfun
    gfarray_v_sing
      {a:vt@ype}{l:addr}{x:int}
      (pf: stamped_vt (a, x) @ l): gfarray_v (a, l, ilist_sing(x))

    Description

    This proof function turns a proof of at-view into another proof of singleton array-view.

    gfarray_v_unsing

    Synopsis

    prfun
    gfarray_v_unsing
      {a:vt@ype}{l:addr}{x:int}
      (pf: gfarray_v (a, l, ilist_sing(x))): stamped_vt (a, x) @ l

    Description

    This proof function turns a proof of singleton array-view into another proof of at-view.

    gfarray_v_split

    Synopsis

    prfun
    gfarray_v_split
      {a:vt0p}
      {l:addr}
      {xs:ilist}
      {n:int}
      {i:nat | i <= n}
    (
      pflen: LENGTH (xs, n)
    , pfarr: gfarray_v (a, l, xs)
    ) : [xs1,xs2:ilist]
    (
      LENGTH (xs1, i)
    , LENGTH (xs2, n-i)
    , APPEND (xs1, xs2, xs)
    , gfarray_v (a, l, xs1)
    , gfarray_v (a, l+i*sizeof(a), xs2)
    ) // end of [gfarray_v_split]

    Description

    This proof function splits a given proof of some array-view into two proofs of adjacent array-views that are contained in the original array-view.

    gfarray_v_unsplit

    Synopsis

    prfun
    gfarray_v_unsplit
      {a:vt0p}
      {l:addr}
      {xs1,xs2:ilist}
      {n1:int} (
      pflen: LENGTH (xs1, n1)
    , pfarr1: gfarray_v (a, l, xs1)
    , pfarr2: gfarray_v (a, l+n1*sizeof(a), xs2)
    ) : [xs:ilist]
    (
      APPEND (xs1, xs2, xs), gfarray_v (a, l, xs)
    ) // end of [gfarray_v_unsplit]

    Description

    This proof function does precisely the opposite of what gfarray_v_split does: It turns two proofs of adjacent array-views into one proof of array-view that is the union of the two adjacent array-views.

    gfarray_v_extend

    Synopsis

    prfun
    gfarray_v_extend
      {a:vt0p}
      {l:addr}
      {xs:ilist}{x:int}{xsx:ilist}
      {n:nat}
    (
      pflen: LENGTH (xs, n)
    , pfsnoc: SNOC (xs, x, xsx)
    , pfat: stamped_vt (a, x) @ l+n*sizeof(a)
    , pfarr: gfarray_v (a, l, xs)
    ) : gfarray_v (a, l, xsx) // endfun

    gfarray_v_unextend

    Synopsis

    prfun
    gfarray_v_unextend
      {a:vt0p}
      {l:addr}
      {xs:ilist}
      {n:int | n > 0}
    (
      pflen: LENGTH (xs, n)
    , pfarr: gfarray_v (a, l, xs)
    ) : [xsf:ilist;x:int] // xsf: the front
    (
      SNOC (xsf, x, xs)
    , stamped_vt (a, x) @ l+(n-1)*sizeof(a), gfarray_v (a, l, xsf)
    ) (* end of [gfarray_v_unextend] *)

    gfarray_get_at

    Synopsis

    fun
    {a:t0p}
    gfarray_get_at
      {l:addr}
      {x0:int}{xs:ilist}
      {i0:int}
    (
      pf1: NTH(x0, xs, i0)
    , pf2: !gfarray_v (a, l, xs)
    | gp0: ptr (l), i0: size_t (i0)
    ) :<> stamped_t (a, x0) // end

    Description

    This function returns the value stored at cell i of a given array.

    gfarray_set_at

    Synopsis

    fun
    {a:t0p}
    gfarray_set_at
      {l:addr}
      {x0:int}{xs1:ilist}{xs2:ilist}
      {i0:int}
    (
      pf1: UPDATE(x0, xs1, i0, xs2)
    , pf2: !gfarray_v(a, l, xs1) >> gfarray_v(a, l, xs2)
    | gp0: ptr (l), i0: size_t (i0), x0: stamped_t (a, x0)
    ) :<!wrt> void // end of [gfarray_set_at]

    Description

    This function stores a given value x into cell i of a given array.

    gfarray_exch_at

    Synopsis

    fun
    {a:vt0p}
    gfarray_exch_at
      {l:addr}
      {x0:int}{x1:int}
      {xs1:ilist}{xs2:ilist}
      {i:int}
    (
      pf1: NTH(x1, xs1, i)
    , pf2: UPDATE(x0, xs1, i, xs2)
    , pf3: !gfarray_v (a, l, xs1) >> gfarray_v (a, l, xs2)
    | p: ptr l, i: size_t i, x0: &stamped_vt (a, x0) >> stamped_vt (a, x1)
    ) :<!wrt> void // end of [gfarray_exch_at]

    Description

    This function exchanges values between a reference and a given array cell.
    This page is created with ATS by Hongwei Xi and also maintained by Hongwei Xi. SourceForge.net Logo