Class DS_MULTIARRAYED_HASH_TABLE PreviousNext

indexing
description:

    "Hash tables implemented with multi-arrays. %
    %Keys are hashed using hash_code from HASHABLE."

library:    "Gobo Eiffel Structure Library"
author:     "Eric Bezault <ericb@gobosoft.com>"
copyright:  "Copyright (c) 2001, Eric Bezault and others"
license:    "Eiffel Forum Freeware License v1 (see forum.txt)"
class interface
DS_MULTIARRAYED_SPARSE_TABLE [G, K -> HASHABLE]
inherit
DS_MULTIARRAYED_SPARSE_TABLE [G, K]
    DS_SPARSE_TABLE [G, K]
        DS_TABLE [G, K]
            DS_CONTAINER [G]
        DS_BILINEAR [G]
            DS_LINEAR [G]
                DS_TRAVERSABLE [G]
                    DS_CONTAINER [G]
                DS_SEARCHABLE [G]
                    DS_CONTAINER [G]
        DS_RESIZABLE [G]
            DS_CONTAINER [G]
creation
make (n: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of default_chunk_size.
        -- Use `=' as comparison criterion for items.
        -- Use equal as comparison criterion for keys.
        -- (From DS_SPARSE_TABLE.)
    require
        positive_n: n >= 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = default_chunk_size
        before: before
make_equal (n: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of default_chunk_size.
        -- Use equal as comparison criterion for items.
        -- Use equal as comparison criterion for keys.
        -- (From DS_SPARSE_TABLE.)
    require
        positive_n: n >= 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = default_chunk_size
        before: before
make_with_chunk_size (n: INTEGER; a_chunk_size: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of a_chunk_size.
        -- Use `=' as comparison criterion for items.
        -- Use equal as comparison criterion for keys.
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    require
        positive_n: n >= 0
        a_chunk_size_positive: a_chunk_size > 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = a_chunk_size
        before: before
make_equal_with_chunk_size (n: INTEGER; a_chunk_size: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of a_chunk_size.
        -- Use equal as comparison criterion for items.
        -- Use equal as comparison criterion for keys.
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    require
        positive_n: n >= 0
        a_chunk_size_positive: a_chunk_size > 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = a_chunk_size
        before: before
make_default
        -- Create an empty table and allocate memory space
        -- for at least default_capacity items.  Array
        -- chunks will have a size of default_chunk_size.
        -- Use `=' as comparison criterion for items.
        -- Use equal as comparison criterion for keys.
        -- (From DS_CONTAINER.)
    ensure
        empty: is_empty
        capacity_set: capacity = default_capacity
        chunk_size_set: chunk_size = default_chunk_size
        before: before
make_map (n: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of default_chunk_size.
        -- Use `=' as comparison criterion for items.
        -- Use `=' as comparison criterion for keys.
        -- (From DS_SPARSE_TABLE.)
    require
        positive_n: n >= 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = default_chunk_size
        before: before
make_map_equal (n: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of default_chunk_size.
        -- Use equal as comparison criterion for items.
        -- Use `=' as comparison criterion for keys.
        -- (From DS_SPARSE_TABLE.)
    require
        positive_n: n >= 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = default_chunk_size
        before: before
make_map_with_chunk_size (n: INTEGER; a_chunk_size: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of a_chunk_size.
        -- Use `=' as comparison criterion for items.
        -- Use `=' as comparison criterion for keys.
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    require
        positive_n: n >= 0
        a_chunk_size_positive: a_chunk_size > 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = a_chunk_size
        before: before
make_map_equal_with_chunk_size (n: INTEGER; a_chunk_size: INTEGER)
        -- Create an empty table and allocate memory space
        -- for at least n items. Array chunks will have
        -- a size of a_chunk_size.
        -- Use equal as comparison criterion for items.
        -- Use `=' as comparison criterion for keys.
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    require
        positive_n: n >= 0
        a_chunk_size_positive: a_chunk_size > 0
    ensure
        empty: is_empty
        capacity_set: capacity = n
        chunk_size_set: chunk_size = a_chunk_size
        before: before
make_map_default
        -- Create an empty table and allocate memory space
        -- for at least default_capacity items.  Array
        -- chunks will have a size of default_chunk_size.
        -- Use `=' as comparison criterion for items.
        -- Use `=' as comparison criterion for keys.
        -- (From DS_SPARSE_TABLE.)
    ensure
        empty: is_empty
        capacity_set: capacity = default_capacity
        chunk_size_set: chunk_size = default_chunk_size
        before: before
make_with_equality_testers (n: INTEGER;
    an_item_tester: like equality_tester;
    a_key_tester: like key_equality_tester)
        -- Create an empty table and allocate memory space for at
        -- least n items. Array chunks will have a size of
        -- default_chunk_size.
        -- Use an_item_tester as comparison criterion for items.
        -- Use a_key_tester as comparison criterion for keys.
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    require
        positive_n: n >= 0
    ensure
        empty: is_empty
        capacity_set: capacity = default_capacity
        chunk_size_set: chunk_size = default_chunk_size
        before: before
        equality_tester_set: equality_tester = an_item_tester
        key_equality_tester_set: key_equality_tester = a_key_tester
make_with_chunk_size_and_equality_testers (n: INTEGER;
    a_chunk_size: INTEGER; an_item_tester: like equality_tester;
    a_key_tester: like key_equality_tester)
        -- Create an empty table and allocate memory space for at
        -- least n items. Array chunks will have a size of a_chunk_size.
        -- Use an_item_tester as comparison criterion for items.
        -- Use a_key_tester as comparison criterion for keys.
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    require
        positive_n: n >= 0
    ensure
        empty: is_empty
        capacity_set: capacity = default_capacity
        chunk_size_set: chunk_size = a_chunk_size
        before: before
        equality_tester_set: equality_tester = an_item_tester
        key_equality_tester_set: key_equality_tester = a_key_tester
feature -- Access
infix "@", item (k: K): G
        -- Item associated with k
        -- (From DS_TABLE.)
    require
        valid_entry: has (k)
key (k: K): K
        -- Key associated with k
        -- (From DS_SPARSE_TABLE.)
    require
        has_k: has (k)
found_item: G
        -- Item found by last call to search
        -- (From DS_SPARSE_TABLE.)
    require
        item_found: found
found_key: K
        -- Key of item found by last call to search
        -- (From DS_SPARSE_TABLE.)
    require
        key_found: found
item_for_iteration: G
        -- Item at internal cursor position
        -- (From DS_TRAVERSABLE.)
    require
        not_off: not off
key_for_iteration: K
        -- Key at internal cursor position
        -- (From DS_SPARSE_TABLE.)
    require
        not_off: not off
first: G
        -- First item in table
        -- (From DS_LINEAR.)
    require
        not_empty: not is_empty
    ensure
        has_first: has_item (Result)
last: G
        -- Last item in table
        -- (From DS_BILINEAR.)
    require
        not_empty: not is_empty
    ensure
        has_last: has_item (Result)
new_cursor: DS_MULTIARRAYED_HASH_TABLE_CURSOR [G, K]
        -- New external cursor for traversal
        -- (From DS_TRAVERSABLE.)
    ensure
        cursor_not_void: Result /= Void
        valid_cursor: valid_cursor (Result)
equality_tester: DS_EQUALITY_TESTER [G]
        -- Equality tester;
        -- A void equality tester means that `='
        -- will be used as comparison criterion.
        -- (From DS_SEARCHABLE.)
key_equality_tester: DS_EQUALITY_TESTER [K]
        -- Equality tester for keys;
        -- A void equality tester means that `='
        -- will be used as comparison criterion.
        -- (From DS_SPARSE_TABLE.)
feature -- Measurement
count: INTEGER
        -- Number of items in table
        -- (From DS_CONTAINER.)
capacity: INTEGER
        -- Maximum number of items in table
        -- (From DS_RESIZABLE.)
default_capacity: INTEGER
        -- Initial capacity in make_default
        -- (Default value: 10)
        -- (From DS_RESIZABLE.)
    ensure
        default_capacity_positive: Result >= 0
chunk_size: INTEGER
        -- Size of array chunks
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
default_chunk_size: INTEGER
        -- Default value for chunk_size
        -- (Default value: 30000)
        -- (From DS_MULTIARRAYED_SPARSE_TABLE.)
    ensure
        default_chunk_size_positive: Result > 0
occurrences (v: G): INTEGER
        -- Number of times v appears in table
        -- (Use equality_tester's comparison criterion
        -- if not void, use `=' criterion otherwise.)
        -- (From DS_SEARCHABLE.)
    ensure
        positive: Result >= 0
        has: has_item (v) implies Result >= 1
feature -- Status report
has (k: K): BOOLEAN
        -- Is there an item associated with k?
        -- (From in DS_TABLE.)
    ensure
        valid_key: Result implies valid_key (k)
has_item (v: G): BOOLEAN
        -- Does table include v?
        -- (Use equality_tester's comparison criterion
        -- if not void, use `=' criterion otherwise.)
        -- (From has in DS_SEARCHABLE.)
    ensure
        not_empty: Result implies not is_empty
found: BOOLEAN
        -- Did last call to search succeed?
        -- (From DS_SPARSE_TABLE.)
is_empty: BOOLEAN
        -- Is table empty?
        -- (From DS_CONTAINER.)
is_full: BOOLEAN
        -- Is table full?
        -- (From DS_RESIZABLE.)
is_first: BOOLEAN
        -- Is internal cursor on first item?
        -- (From DS_LINEAR.)
    ensure
        not_empty: Result implies not is_empty
        not_off: Result implies not off