indexing
description: "[
Helper to perform efficient search of a string in another one.
Note: The algorithm used is the one described in Communications of the ACM,
volume 33, number 8, August 1990, by Daniel M. Sunday. The fuzzy
version was presented by Peter R. Sibbald in Communications of the
ACM, volume 35, number 4, April 1992 (Technical Correspondance).
]"
legal: "See notice at end of class."
status: "See notice at end of class."
date: "$Date: 2006-03-22 15:17:14 -0800 (Wed, 22 Mar 2006) $"
revision: "$Revision: 57607 $"
class interface
STRING_SEARCHER
create
make
feature
initialize_deltas (a_pattern: STRING_GENERAL)
deltas`a_pattern'
require
a_pattern_not_void: a_pattern /= Void
a_pattern_valid: a_pattern.is_valid_as_string_8
feature
generating_type: STRING_8
ANY
generator: STRING_8
ANY
max_ascii_character_value: INTEGER_32 is 255
feature
frozen deep_equal (some: ANY; other: like arg #1): BOOLEAN
`some'`other'
ANY
ensure ANY
shallow_implies_deep: standard_equal (some, other) implies Result
both_or_none_void: (some = Void) implies (Result = (other = Void))
same_type: (Result and (some /= Void)) implies some.same_type (other)
symmetric: Result implies deep_equal (other, some)
frozen equal (some: ANY; other: like arg #1): BOOLEAN
`some'`other'
ANY
ensure ANY
definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.is_equal (other))
is_equal (other: like Current): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
ensure ANY
symmetric: Result implies other.is_equal (Current)
consistent: standard_is_equal (other) implies Result
frozen standard_equal (some: ANY; other: like arg #1): BOOLEAN
`some'`other'
ANY
ensure ANY
definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.standard_is_equal (other))
frozen standard_is_equal (other: like Current): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
ensure ANY
same_type: Result implies same_type (other)
symmetric: Result implies other.standard_is_equal (Current)
feature
conforms_to (other: ANY): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
same_type (other: ANY): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
ensure ANY
definition: Result = (conforms_to (other) and other.conforms_to (Current))
feature
copy (other: like Current)
`other'
ANY
require ANY
other_not_void: other /= Void
type_identity: same_type (other)
ensure ANY
is_equal: is_equal (other)
frozen deep_copy (other: like Current)
copy`other'deep_twin
ANY
require ANY
other_not_void: other /= Void
ensure ANY
deep_equal: deep_equal (Current, other)
frozen deep_twin: like Current
ANY
ensure ANY
deep_equal: deep_equal (Current, Result)
frozen standard_copy (other: like Current)
`other'
ANY
require ANY
other_not_void: other /= Void
type_identity: same_type (other)
ensure ANY
is_standard_equal: standard_is_equal (other)
frozen standard_twin: like Current
`other'
ANY
ensure ANY
standard_twin_not_void: Result /= Void
equal: standard_equal (Result, Current)
frozen twin: like Current
`Current'
twincopycopy
ANY
ensure ANY
twin_not_void: Result /= Void
is_equal: Result.is_equal (Current)
feature
frozen default: like Current
ANY
frozen default_pointer: POINTER
`POINTER'
`p'default
`p'`POINTER'
ANY
default_rescue
ANY
frozen do_nothing
ANY
feature
io: STD_FILES
ANY
out: STRING_8
ANYtagged_out
ANY
print (some: ANY)
`some'
ANY
frozen tagged_out: STRING_8
ANYout
ANY
feature
operating_environment: OPERATING_ENVIRONMENT
ANY
feature
fuzzy_index (a_string, a_pattern: STRING_GENERAL; start_pos, end_pos, fuzzy: INTEGER_32): INTEGER_32
`a_pattern'`start_pos'
`a_string'`fuzzy'`a_string'`a_pattern'
require
a_string_not_void: a_string /= Void
a_pattern_not_void: a_pattern /= Void
a_pattern_valid: a_pattern.is_valid_as_string_8
a_pattern_not_empty: not a_pattern.is_empty
start_large_enough: start_pos >= 1
end_pos_large_enough: start_pos <= end_pos + 1
end_pos_small_enough: end_pos <= a_string.count
fuzzy_non_negative: fuzzy >= 0
acceptable_fuzzy: fuzzy <= a_pattern.count
substring_index (a_string, a_pattern: STRING_GENERAL; start_pos, end_pos: INTEGER_32): INTEGER_32
`a_pattern'`start_pos'
`end_pos'`a_string'
require
a_string_not_void: a_string /= Void
a_pattern_not_void: a_pattern /= Void
a_pattern_valid: a_pattern.is_valid_as_string_8
start_large_enough: start_pos >= 1
end_pos_large_enough: start_pos <= end_pos + 1
end_pos_small_enough: end_pos <= a_string.count
substring_index_with_deltas (a_string, a_pattern: STRING_GENERAL; start_pos, end_pos: INTEGER_32): INTEGER_32
`a_pattern'`start_pos'`a_string'
require
a_string_not_void: a_string /= Void
a_pattern_not_void: a_pattern /= Void
a_pattern_valid: a_pattern.is_valid_as_string_8
a_pattern_not_empty: not a_pattern.is_empty
start_large_enough: start_pos >= 1
end_pos_large_enough: start_pos <= end_pos + 1
end_pos_small_enough: end_pos <= a_string.count
invariant
deltas_not_void: deltas /= Void
deltas_valid: deltas.count = max_ascii_character_value + 1
ANY
reflexive_equality: standard_is_equal (Current)
reflexive_conformance: conforms_to (Current)
indexing
library: "EiffelBase: Library of reusable components for Eiffel."
copyright: "Copyright (c) 1984-2006, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
source: "[
Eiffel Software
356 Storke Road, Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Website http://www.eiffel.com
Customer support http://support.eiffel.com
]"
end STRING_SEARCHER