<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 2.0">
<title>EiffelBase Containers</title>
</head>

<body bgcolor="#FFFFFF">

<table border="0" width="100%">
    <tr>
        <td><font size="6"><strong>EiffelBase Containers</strong></font></td>
        <td align="right"><a href="dispenser.html"><img
        src="../image/previous.gif" alt="Previous" border="0"
        width="40" height="40"></a><a href="flatshort/index.html"><img
        src="../image/next.gif" alt="Next" border="0" width="40"
        height="40"></a></td>
    </tr>
</table>

<hr size="1">

<p align="center"><img src="image/base.gif" width="600"
height="772"></p>

<p align="left"><a href="see_also.html#EiffelBase"><em>EiffelBase</em></a>
is a library of fundamental structures and algorithms covering
the basics of computing, and resulting from a
&quot;Linnaean&quot; effort at a general-purpose taxonomy of
computing structures. The library and its design principles are
described in detail in the book <a
href="see_also.html#reusable_software"><em>Reusable Software</em></a>.
In August 1998 ISE has released the source of <em>EiffelBase</em>
under the IFELL (ISE Free Eiffel Library License). This was great
news since there was a hope to see the code of <em>EiffelBase</em>
ported to other Eiffel compilers. The reason of the excitement
was not due to the fact that Eiffel programmers would now be able
to use this container library in a portable way across various
Eiffel compilers but rather due to the consequence of that.
Indeed many third-party Eiffel libraries are based on <em>EiffelBase</em>.
This meant that unless a great amount of effort was provided to
port these libraries to another Eiffel compiler, they would only
work with ISE Eiffel. So releasing the source of <em>EiffelBase</em>
to the Eiffel community was received as a first step toward
Eiffel libraries portability. Unfortunately, because the code of <em>EiffelBase</em>
relies too closely on ISE Eiffel, it was deemed nearly impossible
to port <em>EiffelBase</em> to <em>SmartEiffel</em>, the GNU
Eiffel compiler. Early attempts to port <em>EiffelBase</em> did
not go to completion or failed, the hopes for Eiffel libraries
portability turned back to projects such as the <a
href="../index.html"><em>Gobo Eiffel Project</em></a>.</p>

<p align="left">Of course I can only encourage Eiffel programmers
to use the <em>Gobo</em> libraries and in particular the <em>Gobo
Eiffel Structure Library</em> in order to develop portable Eiffel
applications and libraries. But it would be a shame if the
numerous third-party Eiffel libraries based on <em>EiffelBase</em>
were not reusable with Eiffel compilers not supporting <em>EiffelBase</em>.
To address this problem the <em>Gobo Eiffel Structure Library</em>
has been extended with a new cluster <font color="#800000"><tt>EiffelBase</tt></font>
in <font color="#800000"><tt>$GOBO/library/other</tt></font>.
This cluster contains the main <em>EiffelBase</em> classes such
as <font color="#008080"><em><tt>LINKED_LIST</tt></em></font>, <font
color="#008080"><em><tt>ARRAYED_LIST</tt></em></font> or <font
color="#008080"><em><tt>HASH_TABLE</tt></em></font>. Since the <em>EiffelBase</em>
library, and therefore its interface, has been made open source,
the classes in the <font color="#800000"><tt>EiffelBase </tt></font>cluster
have the same flat-short form as their original versions in <em>EiffelBase</em>,
but their features have been implemented by inheriting from the <em>Gobo</em>
container classes. But although it works with all Eiffel
compilers supported by <em>Gobo</em>, the <font color="#800000"><tt>EiffelBase
</tt></font>cluster is not a port of <em>EiffelBase</em>. Only a
small subset of <em>EiffelBase</em> classes is available and
although the interface and semantics of the classes are the same
as their original versions, the internal implementation and
inheritance hierarchy are different. This means that the classes
provided in the <font color="#800000"><tt>EiffelBase </tt></font>cluster
can be used in place of the <em>EiffelBase</em> classes when used
by client classes, but there is no guarantee that inheriting from
these classes will work. Please keep in mind that it is not a
port of <em>EiffelBase</em> but rather a temporary means to use
legacy Eiffel libraries based on <em>EiffelBase</em>. In any
case, the classes of the <font color="#800000"><tt>EiffelBase </tt></font>cluster
should be considered as obsolete (in the Eiffel terminology
meaning), that is they are useful to make existing code still
work with various Eiffel compilers but should not be used to
develop new Eiffel software. To develop new Eiffel software one
should rather use the <em>Gobo Eiffel Structure Library</em>.</p>

<p align="left">The classes that are part of the <font
color="#800000"><tt>EiffelBase </tt></font>cluster are
represented in green in the above picture (note that the class <font
color="#008080"><em><tt>CONTAINER</tt></em></font> appears
several times to avoid cluttering too much the graph). The <font
color="#800000"><tt>EiffelBase </tt></font>cluster from the <em>Gobo
Eiffel Structure Library </em>is supposed to replace the <font
color="#800000"><tt>structures</tt></font> clusters of the <em>EiffelBase</em>
library. However some of the classes in the ISE's <font
color="#800000"><tt>kernel</tt></font> and <font color="#800000"><tt>support</tt></font>
clusters rely on some other classes from the <font
color="#800000"><tt>structures</tt></font> clusters. These
classes appear in white in the inheritance graph and are not part
of the <font color="#800000"><tt>EiffelBase </tt></font>cluster.
In order to make these classes compile without the <font
color="#800000"><tt>structures</tt></font> clusters of <em>EiffelBase</em>,
new classes have been added to <em>Gobo</em>'s <font
color="#800000"><tt>EiffelBase </tt></font>cluster. They are
represented in light-grey. These classes are not really part of
abstraction but are only there to make it work with ISE's <font
color="#800000"><tt>kernel</tt></font> and <font color="#800000"><tt>support</tt></font>
clusters. You should not rely on these light-grey classes to
compile other Eiffel libraries. Only green classes can be used
without too much troubles.</p>

<p align="left">It is not the purpose of this documentation to
explain how to use the <em>EiffelBase</em> classes. Should you
need such information please refer to the <a
href="see_also.html#EiffelBase"><em>EiffelBase</em></a>
documentation or the book <a
href="see_also.html#reusable_software"><em>Reusable Software</em></a><em>
</em>directly.</p>

<p align="left">In order to use <em>Gobo</em>'s <font
color="#800000"><tt>EiffelBase </tt></font>cluster instead of <em>EiffelBase</em>,
proceed as follows:</p>

<ol>
    <li><p align="left">Comment out the following clusters in
        your Ace, Xace or ECF file depending on the Eiffel
        compiler you are using:</p>
        <div align="left"><pre><font color="#800000">    $ISE_LIBRARY/library/base/structures/*</font></pre>
        </div></li>
    <li><p align="left">Keep the following clusters if you use
        ISE Eiffel:</p>
        <div align="left"><pre><font color="#800000">    $ISE_LIBRARY/library/base/structures/kernel
    $ISE_LIBRARY/library/base/structures/support</font></pre>
        </div></li>
    <li><p align="left">Add the following line:</p>
        <div align="left"><pre><font color="#800000">    $GOBO/library/other/EiffelBase</font></pre>
        </div><p align="left">along with the other <em>Gobo
        Eiffel Structure Library </em>clusters.</p>
    </li>
</ol>

<p align="left">The cluster pathnames specified in this paragraph
may slightly differ depending on the platform and the Eiffel
compiler you are using.</p>

<p align="left">Note that if you use SmartEiffel you will have a
classname clash with class <font color="#008080"><em><tt>LINKED_LIST</tt></em></font>.
If you don't use SmartEiffel's version of <font color="#008080"><em><tt>LINKED_LIST
</tt></em></font>in your program, then this will not be a
problem. You would just have to make sure that <em>Gobo</em>'s <font
color="#800000"><tt>EiffelBase</tt></font> cluster is listed
before SmartEiffel's <font color="#800000"><tt>lib_std</tt></font>
cluster in your loadpath file.</p>

<hr size="1">

<table border="0" width="100%">
    <tr>
        <td><address>
            <font size="2"><b>Copyright © 1999-2008</b></font><font
            size="1"><b>, </b></font><font size="2"><strong>Eric
            Bezault</strong></font><strong> </strong><font
            size="2"><br>
            <strong>mailto:</strong></font><a
            href="mailto:ericb@gobosoft.com"><font size="2">ericb@gobosoft.com</font></a><font
            size="2"><br>
            <strong>http:</strong></font><a
            href="http://www.gobosoft.com"><font size="2">//www.gobosoft.com</font></a><font
            size="2"><br>
            <strong>Last Updated:</strong> 19 April 2008</font><br>
            <!--webbot bot="PurpleText"
            preview="
$Date$
$Revision$"
            --> 
        </address>
        </td>
        <td align="right" valign="top"><a
        href="http://www.gobosoft.com"><img
        src="../image/home.gif" alt="Home" border="0" width="40"
        height="40"></a><a href="index.html"><img
        src="../image/toc.gif" alt="Toc" border="0" width="40"
        height="40"></a><a href="dispenser.html"><img
        src="../image/previous.gif" alt="Previous" border="0"
        width="40" height="40"></a><a href="flatshort/index.html"><img
        src="../image/next.gif" alt="Next" border="0" width="40"
        height="40"></a></td>
    </tr>
</table>
</body>
</html>
