<?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='libadt' id=''>
  <oberon-doc>
    <summary>Some words on the module hierarchy layout of ADT:</summary>
    <p pad-after='yes' no-indent='yes'>Some words on the module hierarchy layout of ADT:</p>
    <itemize pad-after='yes'>
      <itemize-mark><bullet/></itemize-mark>
      <item pad-after='yes'>
        <p pad-after='no' no-indent='yes'>All modules of this library implementing abstract data types use the prefix <samp>ADT:</samp>.  Test modules are not considered part of the library.  They reside in the top-level namespace, have <samp>Test</samp> as prefix, and are not installed together with the library modules.</p>
      </item>
      <item pad-after='yes'>
        <p pad-after='no' no-indent='yes'>New datatypes are defined in <samp>ADT:*</samp> modules.</p>
      </item>
      <item pad-after='yes'>
        <p pad-after='no' no-indent='yes'>Extensions of datatypes or implementations of abstract types should also use <samp>ADT:*</samp> names.  This avoids a deeply nested namespace for families of datatypes structured through inheritance.</p>
      </item>
      <item pad-after='yes'>
        <p pad-after='yes' no-indent='yes'>Specialized implementations of an existing datatype that do not add any relevant functionality use the name of the more general implementation as prefix.  Example:</p>
        <table pad-after='yes'>
          <table-row pad-after='yes'>
            <table-first-column pad-after='no'><asis>ADT:Dictionary</asis></table-first-column>
            <item pad-after='no'>
              <p pad-after='no' no-indent='yes'>The general purpose implementation of a dictionary.  It maps objects to object references.</p>
            </item>
          </table-row>
          <table-row pad-after='no'>
            <table-first-column pad-after='no'><asis>ADT:Dictionary:IntValue</asis></table-first-column>
            <item pad-after='no'>
              <p pad-after='yes' no-indent='yes'>A version of a dictionary that maps objects to <code>LONGINT</code> values, instead of object references.  The same could be achieved using the <samp>ADT:Dictionary</samp> implementation, at the cost of wrapping all integer values into objects.</p>
              <p pad-after='no' no-indent='no'>The user is encouraged to give such modules a more sensible name on import, for example <samp>IMPORT Dictionary := ADT:Dictionary:IntValue</samp>.</p>
            </item>
          </table-row>
        </table>
        <p pad-after='no' no-indent='no'>The documentation of the general implementation should provide links to the specialized versions.</p>
      </item>
      <item pad-after='no'>
        <p pad-after='no' no-indent='yes'>Modules providing services or algorithms for data types, but do not define a new data type themselves, use the name of the base module as prefix.  For example, a serialization implementation is in module <oberon-module href='ADT:Object:Storage#'>ADT:Object:Storage</oberon-module>, because it implements the abstract rider interface defined in <oberon-module href='ADT:Storable#'>ADT:Storable</oberon-module>.</p>
      </item>
    </itemize>
    <p pad-after='yes' no-indent='no'>It is expected that the <samp>ADT:*</samp> namespace will be quite flat and broad.</p>
  </oberon-doc>
  <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'/>
  <module-ref name='ADT:Storable'>
    <ref-target type='html' relative-uri='ADT/Storable.html'/>
  </module-ref>
  <module-ref name='ADT:Object:Storage'>
    <ref-target type='html' relative-uri='ADT/Object/Storage.html'/>
  </module-ref>
</interface-description>
