class EL_SEARCH_ENGINE

(source code)

Client examples: SEARCH_ENGINE_AUTOTEST_APP

description

Search engine for word searchable list items conforming to EL_WORD_SEARCHABLE

note
	description: "Search engine for word searchable `list' items conforming to ${EL_WORD_SEARCHABLE}"

	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"

	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2024-01-20 19:18:26 GMT (Saturday 20th January 2024)"
	revision: "8"

class
	EL_SEARCH_ENGINE [G -> EL_WORD_SEARCHABLE, P -> EL_SEARCH_TERM_PARSER [G] create make end]

create
	make

feature {NONE} -- Initialization

	make (a_list: like list)
		do
			list := a_list
			create parser.make
			create results.make_empty
		end

feature -- Basic operations

	do_query
		require
			valid_query: valid_query
		do
			if valid_query then
				results := list.query (parser.query_condition)
			else
				results.wipe_out
			end
		end

	search (query: ZSTRING)
		do
			set_query (query)
			if valid_query then
				do_query
			end
		end

feature -- Element change

	set_list (a_list: like list)
		do
			list := a_list
		end

	set_query (query: ZSTRING)
		do
			parser.set_query_condition (query, word_table)
		end

feature -- Access

	results: like list.query

	match_words: like parser.match_words
		do
			Result := parser.match_words
		end

feature -- Status query

	valid_query: BOOLEAN
		do
			Result := parser.is_valid
		end

	invalid_wildcard: BOOLEAN
		-- True if parsed search term had an invalid wild card
		do
			Result := parser.invalid_wildcard
		end

feature {NONE} -- Implementation

	word_table: EL_WORD_TOKEN_TABLE
		do
			if list.is_empty then
				create Result.make (0)
			else
				Result := list.first.word_table
			end
		end

	list: EL_CHAIN [G]

	parser: P

end