note
	description: "[
		Hash tables, used to store items identified by string keys that are compared with or without case sensitivity.
	]"
	legal: "See notice at end of class."
	status: "See notice at end of class."
	warning: "[
		Modifying an object used as a key by an item present in a table will
		cause incorrect behavior. If you will be modifying key objects,
		pass a clone, not the object itself, or an immutable object, as key argument to
		put and replace_key.
	]"
	date: "$Date: 2016-12-08 10:30:24 +0000 (Thu, 08 Dec 2016) $"
	revision: "$Revision: 99662 $"

class 
	STRING_TABLE [G]

inherit
	HASH_TABLE [G, READABLE_STRING_GENERAL]
		redefine
			same_keys,
			hash_code_of,
			empty_duplicate,
			is_equal
		end

create 
	make,
	make_equal,
	make_caseless,
	make_equal_caseless

feature {NONE} -- Initialization

	make_caseless (n: INTEGER_32)
			-- Allocate hash table for at least n items.
			-- The table will be resized automatically
			-- if more than n items are inserted.
			-- Keys will be compared caseless.
		require
			n_non_negative: n >= 0
		do
			is_case_insensitive := True
			make (n)
		ensure
			breathing_space: n < capacity
			more_than_minimum: capacity > Minimum_capacity
			no_status: not special_status
			is_case_insensitive: is_case_insensitive
		end

	make_equal_caseless (n: INTEGER_32)
			-- Allocate hash table for at least n items.
			-- The table will be resized automatically
			-- if more than n items are inserted.
			-- Keys will be compared caseless.
			-- Items will be compared using ~.
		require
			n_non_negative: n >= 0
		do
			is_case_insensitive := True
			make_equal (n)
		ensure
			breathing_space: n < capacity
			more_than_minimum: capacity > Minimum_capacity
			no_status: not special_status
			is_case_insensitive: is_case_insensitive
			compare_objects: object_comparison
		end
	
feature -- Hash code

	hash_code_of (a_key: READABLE_STRING_GENERAL): INTEGER_32
			-- Hash code value
		do
			if is_case_insensitive then
				Result := a_key.case_insensitive_hash_code
			else
				Result := a_key.hash_code
			end
		end
	
feature -- Status report

	is_case_insensitive: BOOLEAN
			-- Ignoring case when comparing keys?
			-- (Default: False)
	
feature -- Comparison

	same_keys (a_search_key, a_key: READABLE_STRING_GENERAL): BOOLEAN
			-- Is a_search_key the same key as a_key ?
		do
			if is_case_insensitive then
				Result := a_search_key.is_case_insensitive_equal (a_key)
			else
				Result := a_search_key.same_string (a_key)
			end
		end

	is_equal (other: like Current): BOOLEAN
			-- Does table contain the same information as other?
		do
			if is_case_insensitive = other.is_case_insensitive then
				Result := Precursor (other)
			end
		end
	
feature {NONE} -- Duplication

	empty_duplicate (n: INTEGER_32): like Current
			-- Create an empty copy of Current that can accommodate n items
		do
			if is_case_insensitive then
				create Result.make_caseless (n)
			else
				create Result.make (n)
			end
			if object_comparison then
				Result.compare_objects
			end
		end
	
note
	copyright: "Copyright (c) 1984-2016, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
		Eiffel Software
		5949 Hollister Ave., Goleta, CA 93117 USA
		Telephone 805-685-1006, Fax 805-685-6869
		Website http://www.eiffel.com
		Customer support http://support.eiffel.com
	]"

end -- class STRING_TABLE

Generated by ISE EiffelStudio