<?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:Object:Storage' id=''>
  <oberon-doc>
    <summary>Note: This module is a reduced version of the <samp>Storage</samp> module from the old abandoned ADT library effort.</summary>
    <p pad-after='yes' no-indent='yes'>Note: This module is a reduced version of the <samp>Storage</samp> module from the old abandoned ADT library effort.  All references to <samp>alien</samp> objects have been removed, otherwise the functionality is unchanged.</p>
    <p pad-after='yes' no-indent='no'>Syntax of externalized objects:</p>
    <example pad-after='yes'>file = {object}.
object = NUM(ref) [ objdescr ].
objdescr = type data {object data}.
type = NUM(tref) [ module_name type_name ].
module_name = {char} 0X.
type_name = {char} 0X.
</example>
    <p pad-after='yes' no-indent='no'><samp>ref</samp> is a unique reference number assigned to an object when it is externalized.  The first occurrence of a reference number is followed by the object's qualified type name, and the object's value.  <samp>tref</samp> is a type reference number; it is allocated in a similar way.</p>
    <p pad-after='yes' no-indent='no'><samp>data</samp> is a sequence of bytes (possibly empty), produced by calling <oberon-proc href='ADT:Storable#ObjectDesc.Store'>Storable.Object.Store</oberon-proc> on a object.  The sequence does not contain any embedded objects, but it does contain <code>NIL</code> pointers.</p>
  </oberon-doc>
  <import-decl name='RT0' id='RT0' export='no' module='RT0'/>
  <import-decl name='IO' id='IO' export='no' module='IO'/>
  <import-decl name='Object' id='Object' export='no' module='Object'/>
  <import-decl name='Storable' id='Storable' export='no' module='ADT:Storable'/>
  <import-decl name='Dictionary' id='Dictionary' export='no' module='ADT:Dictionary:AddressKey:IntValue'/>
  <type-decl name='TypeRefMap' id='TypeRefMap' export='no'>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <record/>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </type-decl>
  <type-decl name='ObjectArray' id='ObjectArray' export='no'>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <type-name module='Object' name='Object' href='Object#Object'/>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </type-decl>
  <type-decl name='TypeArray' id='TypeArray' export='no'>
    <type>
      <pointer>
        <pointer-base>
          <array>
            <element-type>
              <record/>
            </element-type>
          </array>
        </pointer-base>
      </pointer>
    </type>
  </type-decl>
  <type-decl name='CharBuffer' id='CharBuffer' export='no'>
    <type>
      <array>
        <length/>
        <element-type>
          <type-name module='#predef' name='CHAR'/>
        </element-type>
      </array>
    </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='Reader'>
    <type-decl name='Reader' id='Reader' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='ReaderDesc' href='#ReaderDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='ReaderDesc' id='ReaderDesc' export='yes'>
      <oberon-doc>
        <summary>A reader for serialized object data.</summary>
        <p pad-after='yes' no-indent='yes'>A reader for serialized object data.</p>
      </oberon-doc>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='InitReader' id='InitReader' export='yes'>
      <formal-parameters>
        <parameter-decl name='r' id='InitReader.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </parameter-decl>
        <parameter-decl name='ch' id='InitReader.ch' export='no' variable-parameter='no'>
          <type>
            <type-name module='IO' name='ByteChannel' href='IO#ByteChannel'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='ConnectReader' id='ConnectReader' export='yes'>
      <oberon-doc>
        <summary>Creates a new reader instance operating on channel <oberon-param href='#ConnectReader.ch'>ch</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new reader instance operating on channel <oberon-param href='#ConnectReader.ch'>ch</oberon-param>.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='ch' id='ConnectReader.ch' export='no' variable-parameter='no'>
          <type>
            <type-name module='IO' name='ByteChannel' href='IO#ByteChannel'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Reader' href='#Reader'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='ReadObject' id='ReaderDesc.ReadObject' export='yes'>
      <doc-inherited-from module='ADT:Storable' name='ReadObject' class='Reader' href='ADT:Storable#ReaderDesc.ReadObject'/>
      <oberon-doc>
        <summary>Reads an object reference from the channel underlying the reader <oberon-param href='#ReaderDesc.ReadObject.r'>r</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Reads an object reference from the channel underlying the reader <oberon-param href='#ReaderDesc.ReadObject.r'>r</oberon-param>.  The object <oberon-param href='#ReaderDesc.ReadObject.obj'>obj</oberon-param> itself is required to provide the necessary type-bound procedure <oberon-proc href='ADT:Storable#ObjectDesc.Load'>Object.Load</oberon-proc> to restore its own data from <oberon-param href='#ReaderDesc.ReadObject.r'>r</oberon-param>.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.ReadObject.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='ReaderDesc.ReadObject.obj' export='no' variable-parameter='yes'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
      <redefined-method module='ADT:Storable' name='ReadObject' class='Reader' href='ADT:Storable#ReaderDesc.ReadObject'/>
    </procedure>
    <procedure name='Disconnect' id='ReaderDesc.Disconnect' export='yes'>
      <doc-inherited-from module='ADT:Storable' name='Disconnect' class='Reader' href='ADT:Storable#ReaderDesc.Disconnect'/>
      <oberon-doc>
        <summary>Disconnects reader <oberon-param href='#ReaderDesc.Disconnect.r'>r</oberon-param>, and cleans up the internal data structures.</summary>
        <p pad-after='yes' no-indent='yes'>Disconnects reader <oberon-param href='#ReaderDesc.Disconnect.r'>r</oberon-param>, and cleans up the internal data structures.  Any resources allocated by the reader are freed.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='r' id='ReaderDesc.Disconnect.r' export='no' variable-parameter='no'>
          <type>
            <type-name name='Reader' href='#Reader'/>
          </type>
        </receiver-decl>
      </formal-parameters>
      <redefined-method module='ADT:Storable' name='Disconnect' class='Reader' href='ADT:Storable#ReaderDesc.Disconnect'/>
    </procedure>
    <base-class module='ADT:Storable' class='Reader' href='ADT:Storable#Reader'>
      <inherited-method module='ADT:Storable' name='Disconnect' class='Reader' href='ADT:Storable#ReaderDesc.Disconnect'/>
      <inherited-method module='ADT:Storable' name='ReadObject' class='Reader' href='ADT:Storable#ReaderDesc.ReadObject'/>
      <base-class module='IO:BinaryRider' class='Reader' href='IO:BinaryRider#Reader'>
        <inherited-method module='IO:BinaryRider' name='ReadBool' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadBool'/>
        <inherited-method module='IO:BinaryRider' name='ReadBytes' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadBytes'/>
        <inherited-method module='IO:BinaryRider' name='ReadChar' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadChar'/>
        <inherited-method module='IO:BinaryRider' name='ReadInt' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadInt'/>
        <inherited-method module='IO:BinaryRider' name='ReadLChar' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadLChar'/>
        <inherited-method module='IO:BinaryRider' name='ReadLInt' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadLInt'/>
        <inherited-method module='IO:BinaryRider' name='ReadLReal' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadLReal'/>
        <inherited-method module='IO:BinaryRider' name='ReadLString' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadLString'/>
        <inherited-method module='IO:BinaryRider' name='ReadNum' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadNum'/>
        <inherited-method module='IO:BinaryRider' name='ReadReal' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadReal'/>
        <inherited-method module='IO:BinaryRider' name='ReadSInt' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadSInt'/>
        <inherited-method module='IO:BinaryRider' name='ReadSet' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadSet'/>
        <inherited-method module='IO:BinaryRider' name='ReadStr' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadStr'/>
        <inherited-method module='IO:BinaryRider' name='ReadString' class='Reader' href='IO:BinaryRider#ReaderDesc.ReadString'/>
        <inherited-method module='IO:BinaryRider' name='SetByteOrder' class='Reader' href='IO:BinaryRider#ReaderDesc.SetByteOrder'/>
        <inherited-method module='IO:BinaryRider' name='SetPos' class='Reader' href='IO:BinaryRider#ReaderDesc.SetPos'/>
        <inherited-field module='IO:BinaryRider' name='byteOrder' class='Reader' href='IO:BinaryRider#ReaderDesc.byteOrder'/>
        <inherited-field module='IO:BinaryRider' name='channel' class='Reader' href='IO:BinaryRider#ReaderDesc.channel'/>
      </base-class>
    </base-class>
  </class>
  <class name='Writer'>
    <type-decl name='Writer' id='Writer' export='yes'>
      <type>
        <pointer>
          <pointer-base>
            <type-name name='WriterDesc' href='#WriterDesc'/>
          </pointer-base>
        </pointer>
      </type>
    </type-decl>
    <type-decl name='WriterDesc' id='WriterDesc' export='yes'>
      <oberon-doc>
        <summary>A writer of serialized object data.</summary>
        <p pad-after='yes' no-indent='yes'>A writer of serialized object data.</p>
      </oberon-doc>
      <type>
        <record/>
      </type>
    </type-decl>
    <procedure name='InitWriter' id='InitWriter' export='yes'>
      <formal-parameters>
        <parameter-decl name='w' id='InitWriter.w' export='no' variable-parameter='no'>
          <type>
            <type-name name='Writer' href='#Writer'/>
          </type>
        </parameter-decl>
        <parameter-decl name='ch' id='InitWriter.ch' export='no' variable-parameter='no'>
          <type>
            <type-name module='IO' name='ByteChannel' href='IO#ByteChannel'/>
          </type>
        </parameter-decl>
      </formal-parameters>
    </procedure>
    <procedure name='ConnectWriter' id='ConnectWriter' export='yes'>
      <oberon-doc>
        <summary>Creates a new writer instance operating on channel <oberon-param href='#ConnectWriter.ch'>ch</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Creates a new writer instance operating on channel <oberon-param href='#ConnectWriter.ch'>ch</oberon-param>.</p>
      </oberon-doc>
      <formal-parameters>
        <parameter-decl name='ch' id='ConnectWriter.ch' export='no' variable-parameter='no'>
          <type>
            <type-name module='IO' name='ByteChannel' href='IO#ByteChannel'/>
          </type>
        </parameter-decl>
        <result-type>
          <type-name name='Writer' href='#Writer'/>
        </result-type>
      </formal-parameters>
    </procedure>
    <procedure name='WriteObject' id='WriterDesc.WriteObject' export='yes'>
      <doc-inherited-from module='ADT:Storable' name='WriteObject' class='Writer' href='ADT:Storable#WriterDesc.WriteObject'/>
      <oberon-doc>
        <summary>Writes object to the channel underlying the writer <oberon-param href='#WriterDesc.WriteObject.w'>w</oberon-param>.</summary>
        <p pad-after='yes' no-indent='yes'>Writes object to the channel underlying the writer <oberon-param href='#WriterDesc.WriteObject.w'>w</oberon-param>.  The externalization framework is provided by the concrete instance of writer <oberon-param href='#WriterDesc.WriteObject.w'>w</oberon-param>.  The object itself is required to provide the necessary type-bound procedure <oberon-proc href='ADT:Storable#ObjectDesc.Store'>Object.Store</oberon-proc> to pass its own data to <oberon-param href='#WriterDesc.WriteObject.w'>w</oberon-param>.</p>
        <pre-cond pad-after='yes'>
          <p pad-after='no' no-indent='yes'><oberon-param href='#WriterDesc.WriteObject.obj'>obj</oberon-param> is <code>NIL</code>, or it is an instance of <oberon-type href='ADT:Storable#Object'>Object</oberon-type>.</p>
        </pre-cond>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='w' id='WriterDesc.WriteObject.w' export='no' variable-parameter='no'>
          <type>
            <type-name name='Writer' href='#Writer'/>
          </type>
        </receiver-decl>
        <parameter-decl name='obj' id='WriterDesc.WriteObject.obj' export='no' variable-parameter='no'>
          <type>
            <type-name module='Object' name='Object' href='Object#Object'/>
          </type>
        </parameter-decl>
        <exceptions>
          <type-name module='IO' name='Error' href='IO#Error'/>
        </exceptions>
      </formal-parameters>
      <redefined-method module='ADT:Storable' name='WriteObject' class='Writer' href='ADT:Storable#WriterDesc.WriteObject'/>
    </procedure>
    <procedure name='Disconnect' id='WriterDesc.Disconnect' export='yes'>
      <doc-inherited-from module='ADT:Storable' name='Disconnect' class='Writer' href='ADT:Storable#WriterDesc.Disconnect'/>
      <oberon-doc>
        <summary>Completes the data written to the channel of writer <oberon-param href='#WriterDesc.Disconnect.w'>w</oberon-param>, and cleans up the internal data structures.</summary>
        <p pad-after='yes' no-indent='yes'>Completes the data written to the channel of writer <oberon-param href='#WriterDesc.Disconnect.w'>w</oberon-param>, and cleans up the internal data structures.  Without calling <oberon-proc href='ADT:Storable#WriterDesc.Disconnect'>Writer.Disconnect</oberon-proc> the externalized objects may be left in a invalid state, and no new externalization process can be started.  After <oberon-proc href='ADT:Storable#WriterDesc.Disconnect'>Writer.Disconnect</oberon-proc>, all operations on <oberon-param href='#WriterDesc.Disconnect.w'>w</oberon-param> are undefined.</p>
      </oberon-doc>
      <formal-parameters>
        <receiver-decl name='w' id='WriterDesc.Disconnect.w' export='no' variable-parameter='no'>
          <type>
            <type-name name='Writer' href='#Writer'/>
          </type>
        </receiver-decl>
      </formal-parameters>
      <redefined-method module='ADT:Storable' name='Disconnect' class='Writer' href='ADT:Storable#WriterDesc.Disconnect'/>
    </procedure>
    <base-class module='ADT:Storable' class='Writer' href='ADT:Storable#Writer'>
      <inherited-method module='ADT:Storable' name='Disconnect' class='Writer' href='ADT:Storable#WriterDesc.Disconnect'/>
      <inherited-method module='ADT:Storable' name='WriteObject' class='Writer' href='ADT:Storable#WriterDesc.WriteObject'/>
      <base-class module='IO:BinaryRider' class='Writer' href='IO:BinaryRider#Writer'>
        <inherited-method module='IO:BinaryRider' name='SetByteOrder' class='Writer' href='IO:BinaryRider#WriterDesc.SetByteOrder'/>
        <inherited-method module='IO:BinaryRider' name='SetPos' class='Writer' href='IO:BinaryRider#WriterDesc.SetPos'/>
        <inherited-method module='IO:BinaryRider' name='WriteBool' class='Writer' href='IO:BinaryRider#WriterDesc.WriteBool'/>
        <inherited-method module='IO:BinaryRider' name='WriteBytes' class='Writer' href='IO:BinaryRider#WriterDesc.WriteBytes'/>
        <inherited-method module='IO:BinaryRider' name='WriteChar' class='Writer' href='IO:BinaryRider#WriterDesc.WriteChar'/>
        <inherited-method module='IO:BinaryRider' name='WriteInt' class='Writer' href='IO:BinaryRider#WriterDesc.WriteInt'/>
        <inherited-method module='IO:BinaryRider' name='WriteLChar' class='Writer' href='IO:BinaryRider#WriterDesc.WriteLChar'/>
        <inherited-method module='IO:BinaryRider' name='WriteLInt' class='Writer' href='IO:BinaryRider#WriterDesc.WriteLInt'/>
        <inherited-method module='IO:BinaryRider' name='WriteLReal' class='Writer' href='IO:BinaryRider#WriterDesc.WriteLReal'/>
        <inherited-method module='IO:BinaryRider' name='WriteLString' class='Writer' href='IO:BinaryRider#WriterDesc.WriteLString'/>
        <inherited-method module='IO:BinaryRider' name='WriteNum' class='Writer' href='IO:BinaryRider#WriterDesc.WriteNum'/>
        <inherited-method module='IO:BinaryRider' name='WriteReal' class='Writer' href='IO:BinaryRider#WriterDesc.WriteReal'/>
        <inherited-method module='IO:BinaryRider' name='WriteSInt' class='Writer' href='IO:BinaryRider#WriterDesc.WriteSInt'/>
        <inherited-method module='IO:BinaryRider' name='WriteSet' class='Writer' href='IO:BinaryRider#WriterDesc.WriteSet'/>
        <inherited-method module='IO:BinaryRider' name='WriteStr' class='Writer' href='IO:BinaryRider#WriterDesc.WriteStr'/>
        <inherited-method module='IO:BinaryRider' name='WriteString' class='Writer' href='IO:BinaryRider#WriterDesc.WriteString'/>
        <inherited-field module='IO:BinaryRider' name='byteOrder' class='Writer' href='IO:BinaryRider#WriterDesc.byteOrder'/>
        <inherited-field module='IO:BinaryRider' name='channel' class='Writer' href='IO:BinaryRider#WriterDesc.channel'/>
      </base-class>
    </base-class>
  </class>
  <module-ref name='IO:BinaryRider'>
    <ref-target type='html' relative-uri='../../IO/BinaryRider.html'/>
  </module-ref>
  <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>
</interface-description>
