/## Copyright 2021 Kyle Gunger Dual licensed under the CDDL 1.0 and BSD 3-Clause licenses. This file may only be used in accordance with one of the two licenses. You should have received a copy of each license with the source code. In the event that you did not recieve a copy of the licenses, they may be found at the following URLs: CDDL 1.0: https://opensource.org/licenses/CDDL-1.0 BSD 3-Clause: https://opensource.org/licenses/BSD-3-Clause THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE EXPRESS OR IMPLIED #/ ;struct LNode (type T) { T data, ~void next } /; method LNode /; get_next_type (type B) [LNode(B)] ;return (self.next)[~LNode(B)]` ;/ /; get_next [LNode(T)] ;return (self.next)[~LNode(T)]` ;/ ;/ ;struct DLNode (type T) extends LNode(T) { super, ~void prev } /; method DLNode /; get_prev_type (type B) [LNode(B)] ;return (self.prev)[~LNode(B)]` ;/ /; get_prev [LNode(T)] ;return (self.prev)[~LNode(T)]` ;/ ;/ ;struct List { uint length, LNode first, last } ;struct DList { uint length, DLNode first, last }