EiffelBase Containers |

EiffelBase is a library of fundamental structures and algorithms covering the basics of computing, and resulting from a "Linnaean" effort at a general-purpose taxonomy of computing structures. The library and its design principles are described in detail in the book Reusable Software. In August 1998 ISE has released the source of EiffelBase under the IFELL (ISE Free Eiffel Library License). This was great news since there was a hope to see the code of EiffelBase 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 EiffelBase. 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 EiffelBase to the Eiffel community was received as a first step toward Eiffel libraries portability. Unfortunately, because the code of EiffelBase relies too closely on ISE Eiffel, it was deemed nearly impossible to port EiffelBase to SmartEiffel, the GNU Eiffel compiler. Early attempts to port EiffelBase did not go to completion or failed, the hopes for Eiffel libraries portability turned back to projects such as the Gobo Eiffel Project.

Of course I can only encourage Eiffel programmers to use the Gobo libraries and in particular the Gobo Eiffel Structure Library in order to develop portable Eiffel applications and libraries. But it would be a shame if the numerous third-party Eiffel libraries based on EiffelBase were not reusable with Eiffel compilers not supporting EiffelBase. To address this problem the Gobo Eiffel Structure Library has been extended with a new cluster `EiffelBase` in `$GOBO/library/other`. This cluster contains the main EiffelBase classes such as `LINKED_LIST`, `ARRAYED_LIST` or `HASH_TABLE`. Since the EiffelBase library, and therefore its interface, has been made open source, the classes in the `EiffelBase` cluster have the same flat-short form as their original versions in EiffelBase, but their features have been implemented by inheriting from the Gobo container classes. But although it works with all Eiffel compilers supported by Gobo, the `EiffelBase` cluster is not a port of EiffelBase. Only a small subset of EiffelBase 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 `EiffelBase` cluster can be used in place of the EiffelBase 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 EiffelBase but rather a temporary means to use legacy Eiffel libraries based on EiffelBase. In any case, the classes of the `EiffelBase` 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 Gobo Eiffel Structure Library.

The classes that are part of the `EiffelBase` cluster are represented in green in the above picture (note that the class `CONTAINER` appears several times to avoid cluttering too much the graph). The `EiffelBase` cluster from the Gobo Eiffel Structure Library is supposed to replace the `structures` clusters of the EiffelBase library. However some of the classes in the ISE's `kernel` and `support` clusters rely on some other classes from the `structures` clusters. These classes appear in white in the inheritance graph and are not part of the `EiffelBase` cluster. In order to make these classes compile without the `structures` clusters of EiffelBase, new classes have been added to Gobo's `EiffelBase` 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 `kernel` and `support` 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.

It is not the purpose of this documentation to explain how to use the EiffelBase classes. Should you need such information please refer to the EiffelBase documentation or the book Reusable Software directly.

In order to use Gobo's `EiffelBase` cluster instead of EiffelBase, proceed as follows:

1. Comment out the following clusters in your Ace file (ISE Eiffel, SmartEiffel) or your ESD/Xace file (Visual Eiffel) depending on the Eiffel compiler you are using:

           $ISE_EIFFEL/library/base/structures/*

2. Keep the following clusters if you use ISE Eiffel:

           $ISE_EIFFEL/library/base/structures/kernel
           $ISE_EIFFEL/library/base/structures/support

3. Add the following line:

           $GOBO/library/other/EiffelBase

   along with the other Gobo Eiffel Structure Library clusters.

The cluster pathnames specified in this paragraph may slightly differ depending on the platform and the Eiffel compiler you are using.

Note that if you use SmartEiffel you will have a classname clash with class `LINKED_LIST`. If you don't use SmartEiffel's version of `LINKED_LIST` in your program, then this will not be a problem. You would just have to make sure that Gobo's `EiffelBase` cluster is listed before SmartEiffel's `lib_std` cluster in your loadpath file.