135 lines
2.7 KiB
Plaintext
135 lines
2.7 KiB
Plaintext
note
|
|
description: "[
|
|
Collection of CMS modules.
|
|
]"
|
|
date: "$Date: 2015-02-09 22:29:56 +0100 (lun., 09 févr. 2015) $"
|
|
revision: "$Revision: 96596 $"
|
|
|
|
class
|
|
CMS_MODULE_COLLECTION
|
|
|
|
inherit
|
|
ITERABLE [CMS_MODULE]
|
|
|
|
create
|
|
make
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
make (nb: INTEGER)
|
|
do
|
|
create modules.make (nb)
|
|
end
|
|
|
|
feature -- Access
|
|
|
|
item (a_type: TYPE [CMS_MODULE]): detachable CMS_MODULE
|
|
-- Module typed `a_type', if any.
|
|
--| usage: if attached {FOO_MODULE} item ({FOO_MODULE}) as mod then ...
|
|
local
|
|
l_type: TYPE [detachable CMS_MODULE]
|
|
do
|
|
across
|
|
modules as ic
|
|
until
|
|
Result /= Void
|
|
loop
|
|
Result := ic.item
|
|
l_type := Result.generating_type
|
|
if a_type ~ l_type then
|
|
-- Found
|
|
elseif
|
|
-- Hack: use conformance of type, and reverse conformance of type of type.
|
|
attached a_type.attempted (Result) and then
|
|
attached l_type.generating_type.attempted (a_type)
|
|
then
|
|
-- Found
|
|
else
|
|
Result := Void
|
|
end
|
|
end
|
|
ensure
|
|
Result /= Void implies (Result.is_enabled)
|
|
end
|
|
|
|
item_by_name (a_name: READABLE_STRING_GENERAL): detachable CMS_MODULE
|
|
-- (first) module named `a_name', if any.
|
|
--| usage: if attached {FOO_MODULE} item_by_name ("foo") as mod then ...
|
|
do
|
|
across
|
|
modules as ic
|
|
until
|
|
Result /= Void
|
|
loop
|
|
Result := ic.item
|
|
if not a_name.is_case_insensitive_equal (Result.name) then
|
|
Result := Void
|
|
end
|
|
end
|
|
ensure
|
|
Result /= Void implies a_name.is_case_insensitive_equal (Result.name)
|
|
end
|
|
|
|
feature -- Access: iteration
|
|
|
|
new_cursor: INDEXABLE_ITERATION_CURSOR [CMS_MODULE]
|
|
-- <Precursor>
|
|
do
|
|
Result := modules.new_cursor
|
|
end
|
|
|
|
feature -- Status report
|
|
|
|
has (a_module: CMS_MODULE): BOOLEAN
|
|
-- Has `a_module'?
|
|
do
|
|
Result := modules.has (a_module)
|
|
end
|
|
|
|
has_module_with_same_type (a_module: CMS_MODULE): BOOLEAN
|
|
-- Has module of type `a_type' already inserted?
|
|
local
|
|
l_type: TYPE [detachable CMS_MODULE]
|
|
do
|
|
l_type := a_module.generating_type
|
|
across
|
|
modules as ic
|
|
until
|
|
Result
|
|
loop
|
|
Result := ic.item = a_module or else ic.item.generating_type = l_type
|
|
end
|
|
end
|
|
|
|
count: INTEGER
|
|
-- Number of modules.
|
|
do
|
|
Result := modules.count
|
|
end
|
|
|
|
feature -- Element change
|
|
|
|
extend (a_module: CMS_MODULE)
|
|
-- Add module
|
|
do
|
|
if not has (a_module) then
|
|
modules.force (a_module)
|
|
end
|
|
end
|
|
|
|
remove (a_module: CMS_MODULE)
|
|
-- Remove module
|
|
do
|
|
modules.prune_all (a_module)
|
|
end
|
|
|
|
feature {NONE} -- Implementation
|
|
|
|
modules: ARRAYED_LIST [CMS_MODULE]
|
|
-- List of available modules.
|
|
|
|
;note
|
|
copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
|
|
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
|
end
|