class BOOK_COLLECTION create make feature {NONE} -- Initialization make (a_name: UC_STRING) is do set_name (a_name) create book_index.make (10) end feature -- Access name: UC_STRING books: DS_LIST [BOOK] is local c: DS_HASH_TABLE_CURSOR [DS_LIST [BOOK], UC_STRING] do from create {DS_LINKED_LIST [BOOK]} Result.make c := book_index.new_cursor c.start until c.after loop Result.append_last (c.item) c.forth end end books_by_author (an_author: UC_STRING): DS_LIST [BOOK] is do if book_index.has (an_author) then Result := book_index @ an_author else create {DS_LINKED_LIST [BOOK]} Result.make end end feature -- Status setting set_name (a_name: UC_STRING) is do name := a_name end add_book (a_book: BOOK) is local l: DS_LIST [BOOK] do if book_index.has (a_book.author.name) then l := book_index @ a_book.author.name else create {DS_LINKED_LIST [BOOK]} l.make book_index.put (l, a_book.author.name) end l.put_last (a_book) end add_books (book_list: like books) is local c: DS_LIST_CURSOR [BOOK] do from c := book_list.new_cursor c.start until c.after loop add_book (c.item) c.forth end end feature {NONE} -- Implementation book_index: DS_HASH_TABLE [DS_LIST [BOOK], UC_STRING] end -- class BOOK_COLLECTION