1 (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
2 * Jagannathan, and Stephen Weeks.
4 * MLton is released under a BSD-style license.
5 * See the file MLton-LICENSE for details.
8 functor DoublyLinked(S: DOUBLY_LINKED_STRUCTS): DOUBLY_LINKED =
13 fun prevp d = #1(destruct d)
14 fun prev d = Pointer.!(prevp d)
15 fun setPrev(d,d') = Pointer.:=(prevp d,d')
16 fun value d = #2(destruct d)
17 fun nextp d = #3(destruct d)
18 fun next d = Pointer.!(nextp d)
19 fun setNext(d,d') = Pointer.:=(nextp d,d')
26 (if Pointer.isNull(prevp d') then () else link(prev d',d)
30 (if Pointer.isNull(nextp d) then () else link(d',next d)
35 ; Pointer.clear(prevp d)
36 ; Pointer.clear(nextp d))
39 not(Pointer.isNull(prevp d) orelse Pointer.isNull(nextp d))
41 fun eqPrev(d, d') = Pointer.eq(prevp d, prevp d')