<?xml version='1.0' encoding='ISO-8859-1' standalone='no'?>
<!DOCTYPE interface-description SYSTEM 'file:///usr/pkgsrc/lang/oo2c/work.macaroon/oo2c_32-2.0.11/rsrc/OOC/xml/interface-description.dtd'>
<interface-description name='ADT:LinkedList' id=''>
  <import-decl name='Storable' id='Storable' export='no' module='ADT:Storable'/>
  <import-decl name='Object' id='Object' export='no' module='Object'/>
  <import-decl name='IO' id='IO' export='no' module='IO'/>
  <import-decl name='-RT0' id='-RT0' export='no' module='RT0'/>
  <import-decl name='-Object' id='-Object' export='no' module='Object'/>
  <import-decl name='-Exception' id='-Exception' export='no' module='Exception'/>
  <class name='Entry'>
    <type-decl name='Entry' id='Entry' export='no'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='EntryDesc' href='#EntryDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='EntryDesc' id='EntryDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <base-class module='Object' class='Object' href='Object#Object'>
      <inherited-method module='Object' name='Equals' class='Object' href='Object#ObjectDesc.Equals'/>
      <inherited-method module='Object' name='HashCode' class='Object' href='Object#ObjectDesc.HashCode'/>
      <inherited-method module='Object' name='ToString' class='Object' href='Object#ObjectDesc.ToString'/>
    </base-class>
  </class>
  <class name='LinkedList'>
    <type-decl name='LinkedList' id='LinkedList' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='LinkedListDesc' href='#LinkedListDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='LinkedListDesc' id='LinkedListDesc' export='yes'>
      <oberon-doc>
        <summary>Linked-list implementation of a list.</summary>
        <p pad-after='yes' no-indent='yes'>Linked-list implementation of a list. Objects may be efficiently added to or removed from the start or end of the list, making it useful for implementing queues.</p>
      </oberon-doc>
      <type>
        <record>
          <field-decl name='size' id='LinkedListDesc.size' export='read-only'>
            <oberon-doc>
              <summary>Number of elements in the list.</summary>
              <p pad-after='yes' no-indent='yes'>Number of elements in the list.</p>
            </oberon-doc>
            <type>
              <type-name module='#predef' name='LONGINT'/>
            </type>
          </field-decl>
        </record>
      </type>
    </type-decl>
    <procedure name='Init' id='Init' export='yes'>
      <oberon-doc>
        <summary>Initializes an emtpy list</summary>
        <p pad-after='yes' no-indent='yes'>Initializes an emtpy list</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='l' id='Init.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='New' id='New' export='yes'>
      <oberon-doc>
        <summary>Creates a new list</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new list</p>
      </oberon-doc>
      <formal-parameters>
        <result-type>
          <type-name name='LinkedList' href='#LinkedList'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Destroy' id='LinkedListDesc.Destroy' export='yes'>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Destroy.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
      </formal-parameters>
    </procedure>
    <procedure name='GetFirst' id='LinkedListDesc.GetFirst' export='yes'>
      <oberon-doc>
        <summary>Returns the first element in this list</summary>
        <p pad-after='yes' no-indent='yes'>Returns the first element in this list</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.GetFirst.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='GetLast' id='LinkedListDesc.GetLast' export='yes'>
      <oberon-doc>
        <summary>Returns the last element in this list</summary>
        <p pad-after='yes' no-indent='yes'>Returns the last element in this list</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.GetLast.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='RemoveEntry' id='LinkedListDesc.RemoveEntry' export='no'>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.RemoveEntry.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='e' id='LinkedListDesc.RemoveEntry.e' export='no' variable-parameter='no'>
          <type>
            <type-name name='Entry' href='#Entry'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='FindEntry' id='LinkedListDesc.FindEntry' export='no'>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.FindEntry.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='index' id='LinkedListDesc.FindEntry.index' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Entry' href='#Entry'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='RemoveFirst' id='LinkedListDesc.RemoveFirst' export='yes'>
      <oberon-doc>
        <summary>Removes the first element in this list.</summary>
        <p pad-after='yes' no-indent='yes'>Removes the first element in this list.  Shifts any subsequent elements to the left (subtracts one from their indices).</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.RemoveFirst.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='RemoveLast' id='LinkedListDesc.RemoveLast' export='yes'>
      <oberon-doc>
        <summary>Removes the last element in this list.</summary>
        <p pad-after='yes' no-indent='yes'>Removes the last element in this list.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.RemoveLast.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Remove' id='LinkedListDesc.Remove' export='yes'>
      <oberon-doc>
        <summary>Removes the element at the specified position <oberon-param href='#LinkedListDesc.Remove.index'>index</oberon-param> in this list.</summary>
        <p pad-after='yes' no-indent='yes'>Removes the element at the specified position <oberon-param href='#LinkedListDesc.Remove.index'>index</oberon-param> in this list.  Shifts any subsequent elements to the left (subtracts one from their indices).</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><samp>0 &lt;= <oberon-param href='#LinkedListDesc.Remove.index'>index</oberon-param></samp> and <samp><oberon-param href='#LinkedListDesc.Remove.index'>index</oberon-param> &lt; <oberon-proc href='#LinkedListDesc.Size'>l.Size</oberon-proc>()</samp></p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Remove.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='index' id='LinkedListDesc.Remove.index' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='RemoveRange' id='LinkedListDesc.RemoveRange' export='yes'>
      <oberon-doc>
        <summary>Removes from this List all of the elements whose index is between <oberon-param href='#LinkedListDesc.RemoveRange.fromIndex'>fromIndex</oberon-param>, inclusive and <oberon-param href='#LinkedListDesc.RemoveRange.toIndex'>toIndex</oberon-param>, exclusive.</summary>
        <p pad-after='yes' no-indent='yes'>Removes from this List all of the elements whose index is between <oberon-param href='#LinkedListDesc.RemoveRange.fromIndex'>fromIndex</oberon-param>, inclusive and <oberon-param href='#LinkedListDesc.RemoveRange.toIndex'>toIndex</oberon-param>, exclusive.  Shifts any succeeding elements to the left (reduces their index).  This call shortens the list by <samp>toIndex - fromIndex</samp> elements.  (If <samp><oberon-param href='#LinkedListDesc.RemoveRange.toIndex'>toIndex</oberon-param> = <oberon-param href='#LinkedListDesc.RemoveRange.fromIndex'>fromIndex</oberon-param></samp>, this operation has no effect.)</p>
        <pre-cond pad-after='yes'>
          <itemize pad-after='no'>
            <itemize-mark><bullet/></itemize-mark>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><samp>0 &lt;= <oberon-param href='#LinkedListDesc.RemoveRange.fromIndex'>fromIndex</oberon-param></samp> and <samp><oberon-param href='#LinkedListDesc.RemoveRange.fromIndex'>fromIndex</oberon-param> &lt; <oberon-proc href='#LinkedListDesc.Size'>l.Size</oberon-proc>()</samp></p>
            </item>
            <item pad-after='yes'>
              <p pad-after='no' no-indent='yes'><samp>0 &lt;= <oberon-param href='#LinkedListDesc.RemoveRange.toIndex'>toIndex</oberon-param></samp> and <samp><oberon-param href='#LinkedListDesc.RemoveRange.toIndex'>toIndex</oberon-param> &lt; <oberon-proc href='#LinkedListDesc.Size'>l.Size</oberon-proc>()</samp></p>
            </item>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'><samp><oberon-param href='#LinkedListDesc.RemoveRange.toIndex'>toIndex</oberon-param>-<oberon-param href='#LinkedListDesc.RemoveRange.fromIndex'>fromIndex</oberon-param> &gt;= 0</samp></p>
            </item>
          </itemize>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.RemoveRange.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='fromIndex' id='LinkedListDesc.RemoveRange.fromIndex' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='toIndex' id='LinkedListDesc.RemoveRange.toIndex' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='AddBefore' id='LinkedListDesc.AddBefore' export='no'>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.AddBefore.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='element' id='LinkedListDesc.AddBefore.element' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <parameter-decl name='e' id='LinkedListDesc.AddBefore.e' export='no' variable-parameter='no'>
          <type>
            <type-name name='Entry' href='#Entry'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Prepend' id='LinkedListDesc.Prepend' export='yes'>
      <oberon-doc>
        <summary>Appends the specified element <oberon-param href='#LinkedListDesc.Prepend.obj'>obj</oberon-param> to the beginning of this list.</summary>
        <p pad-after='yes' no-indent='yes'>Appends the specified element <oberon-param href='#LinkedListDesc.Prepend.obj'>obj</oberon-param> to the beginning of this list.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Prepend.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='LinkedListDesc.Prepend.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Append' id='LinkedListDesc.Append' export='yes'>
      <oberon-doc>
        <summary>Appends the specified element <oberon-param href='#LinkedListDesc.Append.obj'>obj</oberon-param> to the end of this list.</summary>
        <p pad-after='yes' no-indent='yes'>Appends the specified element <oberon-param href='#LinkedListDesc.Append.obj'>obj</oberon-param> to the end of this list.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Append.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='LinkedListDesc.Append.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Copy' id='LinkedListDesc.Copy' export='yes'>
      <oberon-doc>
        <summary>Returns a shallow copy of <oberon-param href='#LinkedListDesc.Copy.l'>l</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Returns a shallow copy of <oberon-param href='#LinkedListDesc.Copy.l'>l</oberon-param>.  The elements themselves are not copied.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Copy.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='LinkedList' href='#LinkedList'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Clear' id='LinkedListDesc.Clear' export='yes'>
      <oberon-doc>
        <summary>Removes all of the elements from this list.</summary>
        <p pad-after='yes' no-indent='yes'>Removes all of the elements from this list.  The list will be empty after this call returns.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Clear.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Insert' id='LinkedListDesc.Insert' export='yes'>
      <oberon-doc>
        <summary>Inserts the specified element <oberon-param href='#LinkedListDesc.Insert.obj'>obj</oberon-param> at the specified position <oberon-param href='#LinkedListDesc.Insert.index'>index</oberon-param> in this list.</summary>
        <p pad-after='yes' no-indent='yes'>Inserts the specified element <oberon-param href='#LinkedListDesc.Insert.obj'>obj</oberon-param> at the specified position <oberon-param href='#LinkedListDesc.Insert.index'>index</oberon-param> in this list.  Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><samp>0 &lt;= <oberon-param href='#LinkedListDesc.Insert.index'>index</oberon-param></samp> and <samp><oberon-param href='#LinkedListDesc.Insert.index'>index</oberon-param> &lt;= <oberon-proc href='#LinkedListDesc.Size'>l.Size</oberon-proc>()</samp></p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Insert.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='index' id='LinkedListDesc.Insert.index' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='obj' id='LinkedListDesc.Insert.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Get' id='LinkedListDesc.Get' export='yes'>
      <oberon-doc>
        <summary>Returns the element at the specified position <oberon-param href='#LinkedListDesc.Get.index'>index</oberon-param> in this list.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the element at the specified position <oberon-param href='#LinkedListDesc.Get.index'>index</oberon-param> in this list.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><samp>0 &lt;= <oberon-param href='#LinkedListDesc.Get.index'>index</oberon-param></samp> and <samp><oberon-param href='#LinkedListDesc.Get.index'>index</oberon-param> &lt; <oberon-proc href='#LinkedListDesc.Size'>l.Size</oberon-proc>()</samp></p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Get.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='index' id='LinkedListDesc.Get.index' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Set' id='LinkedListDesc.Set' export='yes'>
      <oberon-doc>
        <summary>Replaces the element at the specified position <oberon-param href='#LinkedListDesc.Set.index'>index</oberon-param> in this list with the specified element <oberon-param href='#LinkedListDesc.Set.obj'>obj</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Replaces the element at the specified position <oberon-param href='#LinkedListDesc.Set.index'>index</oberon-param> in this list with the specified element <oberon-param href='#LinkedListDesc.Set.obj'>obj</oberon-param>.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><samp>0 &lt;= <oberon-param href='#LinkedListDesc.Set.index'>index</oberon-param></samp> and <samp><oberon-param href='#LinkedListDesc.Set.index'>index</oberon-param> &lt; <oberon-proc href='#LinkedListDesc.Size'>l.Size</oberon-proc>()</samp></p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Set.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='index' id='LinkedListDesc.Set.index' export='no' variable-parameter='no'>
          <type>
            <type-name module='#predef' name='LONGINT'/>
          </type>
        </parameter-decl>
        <parameter-decl name='obj' id='LinkedListDesc.Set.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Size' id='LinkedListDesc.Size' export='yes'>
      <oberon-doc>
        <summary>Returns the number of elements in this list.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the number of elements in this list.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Size.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Contains' id='LinkedListDesc.Contains' export='yes'>
      <oberon-doc>
        <summary>Returns <code>TRUE</code> if this list contains the specified element.</summary>
        <p pad-after='yes' no-indent='yes'>Returns <code>TRUE</code> if this list contains the specified element.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Contains.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='LinkedListDesc.Contains.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='IndexOf' id='LinkedListDesc.IndexOf' export='yes'>
      <oberon-doc>
        <summary>Searches for the first occurence of the given argument, testing for equality using the <oberon-proc href='Object#ObjectDesc.Equals'>Object.Object.Equals</oberon-proc> method.</summary>
        <p pad-after='yes' no-indent='yes'>Searches for the first occurence of the given argument, testing for equality using the <oberon-proc href='Object#ObjectDesc.Equals'>Object.Object.Equals</oberon-proc> method.  Returns <code>-1</code> if the object is not found.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.IndexOf.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='LinkedListDesc.IndexOf.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='LastIndexOf' id='LinkedListDesc.LastIndexOf' export='yes'>
      <oberon-doc>
        <summary>Searches for the last occurence of the given argument, testing for equality using the <oberon-proc href='Object#ObjectDesc.Equals'>Object.Object.Equals</oberon-proc> method.</summary>
        <p pad-after='yes' no-indent='yes'>Searches for the last occurence of the given argument, testing for equality using the <oberon-proc href='Object#ObjectDesc.Equals'>Object.Object.Equals</oberon-proc> method.  Returns <code>-1</code> if the object is not found.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.LastIndexOf.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='LinkedListDesc.LastIndexOf.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='IsEmpty' id='LinkedListDesc.IsEmpty' export='yes'>
      <oberon-doc>
        <summary>Tests if this list has no elements.</summary>
        <p pad-after='yes' no-indent='yes'>Tests if this list has no elements.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.IsEmpty.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Equals' id='LinkedListDesc.Equals' export='yes'>
      <oberon-doc>
        <summary>Test if an object is equal to this list.</summary>
        <p pad-after='yes' no-indent='yes'>Test if an object is equal to this list. To be equal, a list must contain the same sequence of objects. In this context, "same" means that the Equals test returns true for pairs of objects at equivalent ordinal positions in the source lists.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Equals.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='LinkedListDesc.Equals.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='Object' name='Equals' class='Object' href='Object#ObjectDesc.Equals'/>
      <redefined-method module='Object' name='Equals' class='Object' href='Object#ObjectDesc.Equals'/>
    </procedure>
    <procedure name='HashCode' id='LinkedListDesc.HashCode' export='yes'>
      <doc-inherited-from module='Object' name='HashCode' class='Object' href='Object#ObjectDesc.HashCode'/>
      <oberon-doc>
        <summary>Returns a hash code value for the object.</summary>
        <p pad-after='yes' no-indent='yes'>Returns a hash code value for the object.  This method is supported for the benefit of dictionaries such as those provided by <oberon-module href='ADT:Dictionary#'>ADT:Dictionary</oberon-module>..</p>
        <p pad-after='yes' no-indent='no'>The general contract of <oberon-proc href='Object#ObjectDesc.HashCode'>Object.HashCode</oberon-proc> is:</p>
        <itemize pad-after='yes'>
          <itemize-mark><bullet/></itemize-mark>
          <item pad-after='yes'>
            <p pad-after='no' no-indent='yes'>Whenever it is invoked on the same object more than once during an execution of an application, the <oberon-proc href='Object#ObjectDesc.HashCode'>Object.HashCode</oberon-proc> method must consistently return the same integer, provided no information used in equals comparisons on the object is modified.  This integer need not remain consistent from one execution of an application to another execution of the same application.</p>
          </item>
          <item pad-after='yes'>
            <p pad-after='no' no-indent='yes'>If two objects are equal according to the <oberon-proc href='Object#ObjectDesc.Equals'>Object.Equals</oberon-proc> method, then calling the <oberon-proc href='Object#ObjectDesc.HashCode'>Object.HashCode</oberon-proc> method on each of the two objects must produce the same integer result.</p>
          </item>
          <item pad-after='no'>
            <p pad-after='no' no-indent='yes'>It is <emph>not</emph> required that if two objects are unequal according to the <oberon-proc href='Object#ObjectDesc.Equals'>Object.Equals</oberon-proc> method, then calling the <oberon-proc href='Object#ObjectDesc.HashCode'>Object.HashCode</oberon-proc> method on each of the two objects must produce distinct integer results.  However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of dictionaries.</p>
          </item>
        </itemize>
        <p pad-after='yes' no-indent='no'>As much as is reasonably practical, the <oberon-proc href='Object#ObjectDesc.HashCode'>Object.HashCode</oberon-proc> method defined by class <oberon-type href='Object#Object'>Object</oberon-type> does return distinct integers for distinct objects.  (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required.)</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.HashCode.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
      <redefined-method module='Object' name='HashCode' class='Object' href='Object#ObjectDesc.HashCode'/>
      <redefined-method module='Object' name='HashCode' class='Object' href='Object#ObjectDesc.HashCode'/>
    </procedure>
    <procedure name='Store' id='LinkedListDesc.Store' export='yes'>
      <doc-inherited-from module='ADT:Storable' name='Store' class='Object' href='ADT:Storable#ObjectDesc.Store'/>
      <oberon-doc>
        <summary>Stores data of <oberon-param href='#LinkedListDesc.Store.l'>l</oberon-param> to <oberon-param href='#LinkedListDesc.Store.w'>w</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Stores data of <oberon-param href='#LinkedListDesc.Store.l'>l</oberon-param> to <oberon-param href='#LinkedListDesc.Store.w'>w</oberon-param>.  Nested record pointers are stored by calling the type-bound procedure <oberon-proc href='ADT:Storable#WriterDesc.WriteObject'>Writer.WriteObject</oberon-proc>.  The procedure is not allowed to make any changes to the global state of the program, except for calling the <samp>Write</samp> methods of the writer <oberon-param href='#LinkedListDesc.Store.w'>w</oberon-param>.  Any redefinition of this procedure must include a super call, preferably as the first statement of the procedure body.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'>This procedure is either activated by a super call, or from the procedure <oberon-proc href='ADT:Storable#WriterDesc.WriteObject'>Writer.WriteObject</oberon-proc>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Store.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='w' id='LinkedListDesc.Store.w' export='no' variable-parameter='no'>
          <type>
            <type-name module='Storable' name='Writer' href='ADT:Storable#Writer'/>
          </type>
        </parameter-decl>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
      <redefined-method module='ADT:Storable' name='Store' class='Object' href='ADT:Storable#ObjectDesc.Store'/>
    </procedure>
    <procedure name='Load' id='LinkedListDesc.Load' export='yes'>
      <doc-inherited-from module='ADT:Storable' name='Load' class='Object' href='ADT:Storable#ObjectDesc.Load'/>
      <oberon-doc>
        <summary>Loads data of <oberon-param href='#LinkedListDesc.Load.l'>l</oberon-param> from <oberon-param href='#LinkedListDesc.Load.r'>r</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Loads data of <oberon-param href='#LinkedListDesc.Load.l'>l</oberon-param> from <oberon-param href='#LinkedListDesc.Load.r'>r</oberon-param>.  Nested record pointers are loaded by calling the type-bound procecdure <oberon-proc href='ADT:Storable#ReaderDesc.ReadObject'>Reader.ReadObject</oberon-proc>.  This procedure must be symmetric to <oberon-proc href='ADT:Storable#ObjectDesc.Store'>Object.Store</oberon-proc>, or data internalization will break, causing undefined object state or program termination.</p>
        <p pad-after='yes' no-indent='no'>Note: When internalizing a file with alien objects, it is possible that the type-bound procedure <oberon-proc href='ADT:Storable#ObjectDesc.Load'>Object.Load</oberon-proc> is invoked more than once for a single object.  Except for the results of the last call, all duplicates are discarded.  Because of this, all changes by this procedure to any program state that is not part of the object <oberon-param href='#LinkedListDesc.Load.l'>l</oberon-param> are deprecated.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'>This procedure is either activated by a super call, or from the procedure <oberon-proc href='ADT:Storable#ReaderDesc.ReadObject'>Reader.ReadObject</oberon-proc>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.Load.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='r' id='LinkedListDesc.Load.r' export='no' variable-parameter='no'>
          <type>
            <type-name module='Storable' name='Reader' href='ADT:Storable#Reader'/>
          </type>
        </parameter-decl>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
      <redefined-method module='ADT:Storable' name='Load' class='Object' href='ADT:Storable#ObjectDesc.Load'/>
    </procedure>
    <procedure name='GetIterator' id='LinkedListDesc.GetIterator' export='yes'>
      <oberon-doc>
        <summary>Return an iterator positioned at the start of this list.</summary>
        <p pad-after='yes' no-indent='yes'>Return an iterator positioned at the start of this list. If an iterator <oberon-param href='#LinkedListDesc.GetIterator.i'>i</oberon-param> is supplied (ie. not NIL), it will be initialised and returned as the result. Otherwise (<oberon-param href='#LinkedListDesc.GetIterator.i'>i</oberon-param> is NIL), a new iterator is allocated.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='l' id='LinkedListDesc.GetIterator.l' export='no' variable-parameter='no'>
          <type>
            <type-name name='LinkedList' href='#LinkedList'/>
          </type>
        </receiver-decl>
        <parameter-decl name='i' id='LinkedListDesc.GetIterator.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Iterator' href='#Iterator'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <base-class module='ADT:Storable' class='Object' href='ADT:Storable#Object'>
      <inherited-method module='ADT:Storable' name='Load' class='Object' href='ADT:Storable#ObjectDesc.Load'/>
      <inherited-method module='ADT:Storable' name='Store' class='Object' href='ADT:Storable#ObjectDesc.Store'/>
      <base-class module='Object' class='Object' href='Object#Object'>
        <inherited-method module='Object' name='Equals' class='Object' href='Object#ObjectDesc.Equals'/>
        <inherited-method module='Object' name='HashCode' class='Object' href='Object#ObjectDesc.HashCode'/>
        <inherited-method module='Object' name='ToString' class='Object' href='Object#ObjectDesc.ToString'/>
      </base-class>
    </base-class>
  </class>
  <class name='Iterator'>
    <type-decl name='Iterator' id='Iterator' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='IteratorDesc' href='#IteratorDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='IteratorDesc' id='IteratorDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='HasNext' id='IteratorDesc.HasNext' export='yes'>
      <formal-parameters>
        <receiver-decl name='i' id='IteratorDesc.HasNext.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Next' id='IteratorDesc.Next' export='yes'>
      <formal-parameters>
        <receiver-decl name='i' id='IteratorDesc.Next.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='Object' href='Object#Object'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='NextIndex' id='IteratorDesc.NextIndex' export='yes'>
      <formal-parameters>
        <receiver-decl name='i' id='IteratorDesc.NextIndex.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Remove' id='IteratorDesc.Remove' export='yes'>
      <formal-parameters>
        <receiver-decl name='i' id='IteratorDesc.Remove.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </receiver-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Set' id='IteratorDesc.Set' export='yes'>
      <formal-parameters>
        <receiver-decl name='i' id='IteratorDesc.Set.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='IteratorDesc.Set.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Insert' id='IteratorDesc.Insert' export='yes'>
      <formal-parameters>
        <receiver-decl name='i' id='IteratorDesc.Insert.i' export='no' variable-parameter='no'>
          <type>
            <type-name name='Iterator' href='#Iterator'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='IteratorDesc.Insert.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
  </class>
  <module-ref name='Object'>
    <ref-target type='html' relative-uri='../Object.html'/>
  </module-ref>
  <module-ref name='ADT:Storable'>
    <ref-target type='html' relative-uri='Storable.html'/>
  </module-ref>
  <module-ref name='IO'>
    <ref-target type='html' relative-uri='../IO.html'/>
  </module-ref>
  <module-ref name='ADT:Dictionary'>
    <ref-target type='html' relative-uri='Dictionary.html'/>
  </module-ref>
</interface-description>
