1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
class EXAMPLE1
--
-- Using ITERATOR allows the user to traverse any aggregate object
-- in a more abstract way.
--
creation make
feature
my_loop(type: STRING; my_iterator: ITERATOR[CHARACTER]) is
local
element: CHARACTER;
do
io.put_string("Loop on ");
io.put_string(type);
io.put_string(": ");
from
my_iterator.start;
until
my_iterator.is_off
loop
element := my_iterator.item;
io.put_character(element);
my_iterator.next;
end;
io.put_new_line;
end;
feature {NONE}
make is
do
use_iterator_on_string;
use_iterator_on_array;
use_iterator_on_fixed_array;
use_iterator_on_linked_list;
use_iterator_on_two_way_linked_list;
io.put_string("Do you like ITERATORs ?%N");
io.put_string("So let's see what happends with a DICTIONARY.%N");
use_iterator_on_dictionary;
io.put_string("And this is not a bug!%N");
end;
use_iterator_on_string is
local
iterator: ITERATOR[CHARACTER];
do
iterator := ("foo").get_new_iterator;
my_loop("STRING",iterator);
end;
use_iterator_on_array is
local
iterator: ITERATOR[CHARACTER];
do
iterator := (<<'b','a','r'>>).get_new_iterator;
my_loop("ARRAY",iterator);
end;
use_iterator_on_fixed_array is
local
iterator: ITERATOR[CHARACTER];
my_fa: FIXED_ARRAY[CHARACTER];
do
!!my_fa.with_capacity(4);
my_fa.add_last('f');
my_fa.add_last('O');
my_fa.add_last('o');
iterator := my_fa.get_new_iterator;
my_loop("FIXED_ARRAY",iterator);
end;
use_iterator_on_linked_list is
local
iterator: ITERATOR[CHARACTER];
ll: LINKED_LIST[CHARACTER];
do
!!ll.make;
ll.add_last('B');
ll.add_last('a');
ll.add_last('R');
iterator := ll.get_new_iterator;
my_loop("LINKED_LIST",iterator);
end;
use_iterator_on_two_way_linked_list is
local
iterator: ITERATOR[CHARACTER];
twll: TWO_WAY_LINKED_LIST[CHARACTER];
do
!!twll.make;
twll.add_last('F');
twll.add_last('o');
twll.add_last('O');
iterator := twll.get_new_iterator;
my_loop("TWO_WAY_LINKED_LIST",iterator);
end;
use_iterator_on_dictionary is
local
iterator: ITERATOR[CHARACTER];
d: DICTIONARY[CHARACTER,CHARACTER];
do
!!d.make;
d.put('o','B');
d.put('f','a');
d.put('O','R');
iterator := d.get_new_iterator_on_items;
my_loop("DICTIONARY (items)",iterator);
iterator := d.get_new_iterator_on_keys;
my_loop("DICTIONARY (keys)",iterator);
end;
end
|