/tutorial/iterator/example1.e

http://github.com/tybor/Liberty · Specman e · 111 lines · 96 code · 11 blank · 4 comment · 0 complexity · 22917a104ea0d7fa52c9fe00a5b5eb8d MD5 · raw file

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