<?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:Dictionary:AddressKey' id=''>
  <oberon-doc>
    <summary>This module is a reimplementation of the Python dictionary code in Oberon-2.</summary>
    <p pad-after='yes' no-indent='yes'>This module is a reimplementation of the Python dictionary code in Oberon-2.  It is based on version 2.65 of the python file <file>src/Objects/dictobject.c</file>.  It maps objects on other objects.  Some bit twiddling is required, partially due to the algorithm and partially due to performance, which may impede portability of the code.</p>
    <p pad-after='yes' no-indent='no'>Differences between <file>dictobject.c</file> and this implementation:</p>
    <itemize pad-after='yes'>
      <itemize-mark><bullet/></itemize-mark>
      <item pad-after='yes'>
        <p pad-after='no' no-indent='yes'><code>NIL</code> can be used as a value.  This implies that the field <samp>Entry.value</samp> cannot be used to determine if the entry is in use or not.</p>
      </item>
      <item pad-after='no'>
        <p pad-after='no' no-indent='yes'>Any inefficiencies in this implementation are my fault, and do not originate in the Python implementation.</p>
      </item>
    </itemize>
  </oberon-doc>
  <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'/>
  <type-decl name='Hash' id='Hash' export='no'>
    <type>
      <type-name module='#predef' name='LONGINT'/>
    </type>
  </type-decl>
  <type-decl name='Index' id='Index' export='no'>
    <type>
      <type-name module='#predef' name='LONGINT'/>
    </type>
  </type-decl>
  <type-decl name='Key' id='Key' export='yes'>
    <oberon-doc>
      <summary>Type of key entries in the dictionary.</summary>
      <p pad-after='yes' no-indent='yes'>Type of key entries in the dictionary.</p>
    </oberon-doc>
    <type>
      <type-name module='Object' name='Object' href='Object#Object'/>
    </type>
  </type-decl>
  <type-decl name='Value' id='Value' export='yes'>
    <oberon-doc>
      <summary>Type of value entries in the dictionary.</summary>
      <p pad-after='yes' no-indent='yes'>Type of value entries in the dictionary.</p>
    </oberon-doc>
    <type>
      <type-name module='Object' name='Object' href='Object#Object'/>
    </type>
  </type-decl>
  <type-decl name='Entry' id='Entry' export='no'>
    <type>
      <record/>
    </type>
  </type-decl>
  <type-decl name='Table' id='Table' export='no'>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <type-name name='Entry' href='#Entry'/>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </type-decl>
  <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='Dictionary'>
    <type-decl name='Dictionary' id='Dictionary' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='DictionaryDesc' href='#DictionaryDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='DictionaryDesc' id='DictionaryDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='Init' id='Init' export='yes'>
      <oberon-doc>
        <summary>Initializes <oberon-param href='#Init.dict'>dict</oberon-param> to an empty dictionary.</summary>
        <p pad-after='yes' no-indent='yes'>Initializes <oberon-param href='#Init.dict'>dict</oberon-param> to an empty dictionary.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='dict' id='Init.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='New' id='New' export='yes'>
      <oberon-doc>
        <summary>Creates a new, empty dictionary.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new, empty dictionary.</p>
      </oberon-doc>
      <formal-parameters>
        <result-type>
          <type-name name='Dictionary' href='#Dictionary'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Destroy' id='DictionaryDesc.Destroy' export='yes'>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Destroy.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
      </formal-parameters>
    </procedure>
    <procedure name='HasKey' id='DictionaryDesc.HasKey' export='yes'>
      <oberon-doc>
        <summary>Tests if an item in <oberon-param href='#DictionaryDesc.HasKey.dict'>dict</oberon-param> exists with the key <oberon-param href='#DictionaryDesc.HasKey.key'>key</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Tests if an item in <oberon-param href='#DictionaryDesc.HasKey.dict'>dict</oberon-param> exists with the key <oberon-param href='#DictionaryDesc.HasKey.key'>key</oberon-param>.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><oberon-param href='#DictionaryDesc.HasKey.key'>key</oberon-param> is not <code>NIL</code>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.HasKey.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='key' id='DictionaryDesc.HasKey.key' export='no' variable-parameter='no'>
          <type>
            <type-name name='Key' href='#Key'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name module='#predef' name='BOOLEAN'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Size' id='DictionaryDesc.Size' export='yes'>
      <oberon-doc>
        <summary>Returns the number of items in the dictionary.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the number of items in the dictionary.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Size.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='#predef' name='LONGINT'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Get' id='DictionaryDesc.Get' export='yes'>
      <oberon-doc>
        <summary>Retrieves the value associated with <oberon-param href='#DictionaryDesc.Get.key'>key</oberon-param> in the dictionary <oberon-param href='#DictionaryDesc.Get.dict'>dict</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Retrieves the value associated with <oberon-param href='#DictionaryDesc.Get.key'>key</oberon-param> in the dictionary <oberon-param href='#DictionaryDesc.Get.dict'>dict</oberon-param>.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'>An item with the key <oberon-param href='#DictionaryDesc.Get.key'>key</oberon-param> exists in the dictionary <oberon-param href='#DictionaryDesc.Get.dict'>dict</oberon-param>.  This implies that <oberon-param href='#DictionaryDesc.Get.key'>key</oberon-param> is not <code>NIL</code>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Get.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='key' id='DictionaryDesc.Get.key' export='no' variable-parameter='no'>
          <type>
            <type-name name='Key' href='#Key'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Value' href='#Value'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Set' id='DictionaryDesc.Set' export='yes'>
      <oberon-doc>
        <summary>Sets the value for key <oberon-param href='#DictionaryDesc.Set.key'>key</oberon-param> in the dictionary <oberon-param href='#DictionaryDesc.Set.dict'>dict</oberon-param> to <oberon-param href='#DictionaryDesc.Set.value'>value</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Sets the value for key <oberon-param href='#DictionaryDesc.Set.key'>key</oberon-param> in the dictionary <oberon-param href='#DictionaryDesc.Set.dict'>dict</oberon-param> to <oberon-param href='#DictionaryDesc.Set.value'>value</oberon-param>.  If an item with this key already exists, its value is replaced.  Otherwise, a new item is created with the given (<oberon-param href='#DictionaryDesc.Set.key'>key</oberon-param>, <oberon-param href='#DictionaryDesc.Set.value'>value</oberon-param>) pair.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><oberon-param href='#DictionaryDesc.Set.key'>key</oberon-param> is not <code>NIL</code>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Set.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='key' id='DictionaryDesc.Set.key' export='no' variable-parameter='no'>
          <type>
            <type-name name='Key' href='#Key'/>
          </type>
        </parameter-decl>
        <parameter-decl name='value' id='DictionaryDesc.Set.value' export='no' variable-parameter='no'>
          <type>
            <type-name name='Value' href='#Value'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Copy' id='DictionaryDesc.Copy' export='yes'>
      <oberon-doc>
        <summary>Creates a shallow copy of the dictionary <oberon-param href='#DictionaryDesc.Copy.dict'>dict</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a shallow copy of the dictionary <oberon-param href='#DictionaryDesc.Copy.dict'>dict</oberon-param>.  The key and value objects themselves are not copied.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Copy.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name name='Dictionary' href='#Dictionary'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Delete' id='DictionaryDesc.Delete' export='yes'>
      <oberon-doc>
        <summary>Removes the item with the key <oberon-param href='#DictionaryDesc.Delete.key'>key</oberon-param> from the dictionary <oberon-param href='#DictionaryDesc.Delete.dict'>dict</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Removes the item with the key <oberon-param href='#DictionaryDesc.Delete.key'>key</oberon-param> from the dictionary <oberon-param href='#DictionaryDesc.Delete.dict'>dict</oberon-param>.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'>n item with the key <oberon-param href='#DictionaryDesc.Delete.key'>key</oberon-param> exists in the dictionary <oberon-param href='#DictionaryDesc.Delete.dict'>dict</oberon-param>.  This implies that <oberon-param href='#DictionaryDesc.Delete.key'>key</oberon-param> is not <code>NIL</code>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Delete.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='key' id='DictionaryDesc.Delete.key' export='no' variable-parameter='no'>
          <type>
            <type-name name='Key' href='#Key'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Clear' id='DictionaryDesc.Clear' export='yes'>
      <oberon-doc>
        <summary>Removes all items from the dictionary <oberon-param href='#DictionaryDesc.Clear.dict'>dict</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Removes all items from the dictionary <oberon-param href='#DictionaryDesc.Clear.dict'>dict</oberon-param>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Clear.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
      </formal-parameters>
    </procedure>
    <procedure name='Keys' id='DictionaryDesc.Keys' export='yes'>
      <oberon-doc>
        <summary>Returns the list of keys of the dictionary <oberon-param href='#DictionaryDesc.Keys.dict'>dict</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the list of keys of the dictionary <oberon-param href='#DictionaryDesc.Keys.dict'>dict</oberon-param>.  The keys are listed in no particular order.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Keys.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='ObjectArrayPtr' href='Object#ObjectArrayPtr'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Values' id='DictionaryDesc.Values' export='yes'>
      <oberon-doc>
        <summary>Returns the list of values of the dictionary <oberon-param href='#DictionaryDesc.Values.dict'>dict</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Returns the list of values of the dictionary <oberon-param href='#DictionaryDesc.Values.dict'>dict</oberon-param>.  The values are listed in no particular order.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Values.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <result-type>
          <type-name module='Object' name='ObjectArrayPtr' href='Object#ObjectArrayPtr'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='Equals' id='DictionaryDesc.Equals' export='yes'>
      <doc-inherited-from module='Object' name='Equals' class='Object' href='Object#ObjectDesc.Equals'/>
      <oberon-doc>
        <summary>Indicates whether some other object is "equal to" this one.</summary>
        <p pad-after='yes' no-indent='yes'>Indicates whether some other object is "equal to" this one.</p>
        <p pad-after='yes' no-indent='no'>The <oberon-proc href='Object#ObjectDesc.Equals'>Object.Equals</oberon-proc> method implements an equivalence relation:</p>
        <itemize pad-after='yes'>
          <itemize-mark><bullet/></itemize-mark>
          <item pad-after='yes'>
            <p pad-after='no' no-indent='yes'>It is reflexive: for any reference value <samp>x</samp>, <samp>x.Equals(x)</samp> should return <code>TRUE</code>.</p>
          </item>
          <item pad-after='yes'>
            <p pad-after='no' no-indent='yes'>It is symmetric: for any reference values <samp>x</samp> and <samp>y</samp>, <samp>x.Equals(y)</samp> should return <code>TRUE</code> if and only if <samp>y.Equals(x)</samp> returns <code>TRUE</code>.</p>
          </item>
          <item pad-after='yes'>
            <p pad-after='no' no-indent='yes'>It is transitive: for any reference values <samp>x</samp>, <samp>y</samp>, and <samp>z</samp>, if <samp>x.Equals(y)</samp> returns <code>TRUE</code> and <samp>y.Equals(z)</samp> returns <code>TRUE</code>, then <samp>x.Equals(z)</samp> should return <code>TRUE</code>.</p>
          </item>
          <item pad-after='yes'>
            <p pad-after='no' no-indent='yes'>It is consistent: for any reference values <samp>x</samp> and <samp>y</samp>, multiple invocations of <samp>x.Equals(y)</samp> consistently return <code>TRUE</code> or consistently return <code>FALSE</code>, provided no information used in equals comparisons on the object is modified.</p>
          </item>
          <item pad-after='no'>
            <p pad-after='no' no-indent='yes'>For any non-<code>NIL</code> reference value <samp>x</samp>, <samp>x.Equals(NIL)</samp> should return <code>FALSE</code>.</p>
          </item>
        </itemize>
        <p pad-after='yes' no-indent='no'>The <samp>Equals</samp> method for class <oberon-type href='Object#Object'>Object</oberon-type> implements the most discriminating possible equivalence relation on objects; that is, for any reference values <samp>x</samp> and <samp>y</samp>, this method returns <code>TRUE</code> if and only if <samp>x</samp> and <samp>y</samp> refer to the same object (<samp>x=y</samp> has the value <code>TRUE</code>).</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='dict' id='DictionaryDesc.Equals.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='DictionaryDesc.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='DictionaryDesc.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='dict' id='DictionaryDesc.HashCode.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </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='DictionaryDesc.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='#DictionaryDesc.Store.dict'>dict</oberon-param> to <oberon-param href='#DictionaryDesc.Store.w'>w</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Stores data of <oberon-param href='#DictionaryDesc.Store.dict'>dict</oberon-param> to <oberon-param href='#DictionaryDesc.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='#DictionaryDesc.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='dict' id='DictionaryDesc.Store.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='w' id='DictionaryDesc.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='DictionaryDesc.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='#DictionaryDesc.Load.dict'>dict</oberon-param> from <oberon-param href='#DictionaryDesc.Load.r'>r</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Loads data of <oberon-param href='#DictionaryDesc.Load.dict'>dict</oberon-param> from <oberon-param href='#DictionaryDesc.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='#DictionaryDesc.Load.dict'>dict</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='dict' id='DictionaryDesc.Load.dict' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dictionary' href='#Dictionary'/>
          </type>
        </receiver-decl>
        <parameter-decl name='r' id='DictionaryDesc.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>
    <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='Dummy'>
    <type-decl name='Dummy' id='Dummy' export='no'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='DummyDesc' href='#DummyDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='DummyDesc' id='DummyDesc' export='no'>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='Destroy' id='DummyDesc.Destroy' export='yes'>
      <formal-parameters>
        <receiver-decl name='dummy' id='DummyDesc.Destroy.dummy' export='no' variable-parameter='no'>
          <type>
            <type-name name='Dummy' href='#Dummy'/>
          </type>
        </receiver-decl>
      </formal-parameters>
    </procedure>
    <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>
  <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>
