VSL - The prelude.cabi.utils Structure

# Copyright 2011  Petter Urkedal
#
# This file is part of the Viz Standard Library <http://www.vizlang.org/>.
#
# The Viz Standard Library (VSL) is free software: you can redistribute it
# and/or modify it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version.
#
# The VSL is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
# more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with the VSL.  If not, see <http://www.gnu.org/licenses/>.

open prereq
open record
open effect
open record_sigs.phantoms

in ptr_ref
    type r ψ δ := record.r ψ (ptr_ph δ)

    let! new ev p
	let r do record.alloc (record_ptr_ev ev)
	do lens.store_ptr p (record.focus r)
	be r

    let! load r do lens.load_ptr (record.focus r)

    let! store p r do lens.store_ptr p (record.focus r)

    let arg be record.focus

in cref.(ctype : a_foreign_type)

    type r ψ := record.r ψ ctype.ph

    let! new x
	let r do record.alloc ctype.ev
	do ctype.store x (record.focus r)
	be r

    let! load r do ctype.load (record.focus r)

    let! store x r do ctype.store x (record.focus r)

    let arg be record.focus

in carray.(ctype : a_foreign_type)

    type r ψ := record.r ψ (spill_ph unit ctype.ph)

    let! new n do record.alloc_spilled unit_ev n ctype.ev

    let _has_elt be snd @ spill_ev unit_ev ctype.ev
    let focus_at i be lens.focus_element _has_elt i  record.focus

    let! load i r do ctype.load (focus_at i r)
    let! store i x r do ctype.store x (focus_at i r)


# 0.0.  Reference Instances

in   int8_t_ref include cref.(int8_t)
in  uint8_t_ref include cref.(uint8_t)
in  int16_t_ref include cref.(int16_t)
in uint16_t_ref include cref.(uint16_t)
in  int32_t_ref include cref.(int32_t)
in uint32_t_ref include cref.(uint32_t)
in  int64_t_ref include cref.(int64_t)
in uint64_t_ref include cref.(uint64_t)

in sshort_ref include cref.(sshort)
in ushort_ref include cref.(ushort)
in   sint_ref include cref.(sint)
in   uint_ref include cref.(uint)
in  slong_ref include cref.(slong)
in  ulong_ref include cref.(ulong)

in ptrdiff_t_ref include cref.(ptrdiff_t)
in    size_t_ref include cref.(size_t)
in  intptr_t_ref include cref.(intptr_t)
in uintptr_t_ref include cref.(uintptr_t)

# 0.0.  Array Instances

in   int8_t_array include carray.(int8_t)
in  uint8_t_array include carray.(uint8_t)
in  int16_t_array include carray.(int16_t)
in uint16_t_array include carray.(uint16_t)
in  int32_t_array include carray.(int32_t)
in uint32_t_array include carray.(uint32_t)
in  int64_t_array include carray.(int64_t)
in uint64_t_array include carray.(uint64_t)

in sshort_array include carray.(sshort)
in ushort_array include carray.(ushort)
in   sint_array include carray.(sint)
in   uint_array include carray.(uint)
in  slong_array include carray.(slong)
in  ulong_array include carray.(ulong)

in ptrdiff_t_array include carray.(ptrdiff_t)
in    size_t_array include carray.(size_t)
in  intptr_t_array include carray.(intptr_t)
in uintptr_t_array include carray.(uintptr_t)