Difference between revisions of "Lib/storage"
m (8 revisions: initial import from SamrtEiffel Wiki - The Grand SmartEiffel Book) |
m (s/LibertyEiffel/Liberty Eiffel/ and typo) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | [[Category: |
+ | [[Category:Library]] |
− | This library is one of the most essential ones of |
+ | This library is one of the most essential ones of Liberty Eiffel. It is generally used along with [[lib/abilities]] because some classes require specific properties about objects they can contain. Most of the storage classes are also [[library_class:TRAVERSABLE|<tt>TRAVERSABLE</tt>]], and also supply [[library_class:ITERATOR|<tt>ITERATOR</tt>]] objects (see the [[lib/iterator]] library). |
The point here is to store objects. This implies not only to "remember" them, but also to "retrieve" them, of course. But everything is based on the ''way'' to retrieve a stored object. |
The point here is to store objects. This implies not only to "remember" them, but also to "retrieve" them, of course. But everything is based on the ''way'' to retrieve a stored object. |
||
Line 14: | Line 14: | ||
* [[library_class:LINKED_LIST|<tt>LINKED_LIST</tt>]] and [[library_class:TWO_WAY_LINKED_LIST|<tt>TWO_WAY_LINKED_LIST</tt>]] are linked lists |
* [[library_class:LINKED_LIST|<tt>LINKED_LIST</tt>]] and [[library_class:TWO_WAY_LINKED_LIST|<tt>TWO_WAY_LINKED_LIST</tt>]] are linked lists |
||
− | There are also [[library_class:COLLECTION2|two-]] and [[library_class:COLLECTION3|three-]] |
+ | There are also [[library_class:COLLECTION2|two-]] and [[library_class:COLLECTION3|three-]]dimensional collections that allow to manipulate object matrices. |
== Dictionaries == |
== Dictionaries == |
Latest revision as of 11:04, 2 July 2016
This library is one of the most essential ones of Liberty Eiffel. It is generally used along with lib/abilities because some classes require specific properties about objects they can contain. Most of the storage classes are also TRAVERSABLE, and also supply ITERATOR objects (see the lib/iterator library).
The point here is to store objects. This implies not only to "remember" them, but also to "retrieve" them, of course. But everything is based on the way to retrieve a stored object.
Collections
Collections are classes that allow to store objects and recover them by using integers. The two most known implementations are available: arrays (contiguous storage of elements) and linked lists (storage of elements with references to other elements).
The most useful classes are:
- ARRAY, the well-known array
- RING_ARRAY, an array whose implementation is optimized for extensions at both ends
- FAST_ARRAY, an array whose lower bound is always 0
- LINKED_LIST and TWO_WAY_LINKED_LIST are linked lists
There are also two- and three-dimensional collections that allow to manipulate object matrices.
Dictionaries
Dictionaries are classes that allow to store key-value couples. Thus a value is available with its key.
One can say that collections are equivalent to dictionaries whose keys are integers, but the case of collections is kept because it is very frequent.
There are several dictionary implementations, that use different properties of the keys to accelerate access to the elements without having to look through the whole dictionary.
- If the keys are HASHABLE, one can use the HASHED_DICTIONARY class that uses the hash_code of the keys.
- If the keys are COMPARABLE, one can use the AVL_DICTIONARY class that uses a balanced binary tree.
- There is no implementation if the keys have none of these two properties.
One will notice the bijective dictionaries whose elements are all unique. One can also define an inverted bijective dictionary (planned class for the version 2.3).
Sets
Sets are classes that allow to store elements in a unique manner. The goal is not necessarily to retrieve them by a key, but to know how to look through the set of elements.
As with dictionaries, there are two kinds of sets in accordance with the properties of the elements.
- If the elements are HASHABLE, one can use the HASHED_SET classe that uses the hash_code of the elements.
- If the elements are COMPARABLE, one can use the AVL_SET class that uses a balanced binary tree.
- There is no implementation if the elements have none of these two properties.
Multi-sets
MULTI_SETs are not yet implemented.
Queues and stacks
The QUEUE class implements queues of objects.
The STACK class implements stacks of objects.
Repositories
Repositories allow to store objects so as to retrieve them later. The point here is to serialize objects. This is useful, for example, to store objects on the hard drive (by using lib/io), or to transmit them on the network (by using lib/net), etc.
These repositories behave like dictionaries whose keys are strings and values are STORABLE. Their interface is similar to the one of the dictionaries, with additional features to load objects (update) and store them (commit).
There is a single implementation of repository: the XML_REPOSITORY class that transforms objects into an XML stream (using lib/xml).