Advertisement
Guest User

Untitled

a guest
Feb 19th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.13 KB | None | 0 0
  1. CLASS zhm_list DEFINITION PUBLIC INHERITING FROM zhm_object.
  2. PUBLIC SECTION.
  3. METHODS add REDEFINITION.
  4. METHODS get REDEFINITION.
  5. METHODS get_last REDEFINITION.
  6. METHODS get_size REDEFINITION.
  7. METHODS for_each REDEFINITION.
  8. METHODS where REDEFINITION.
  9. METHODS map REDEFINITION.
  10. METHODS sum REDEFINITION.
  11. METHODS for_each_where REDEFINITION.
  12. PRIVATE SECTION.
  13. DATA primitive_list TYPE STANDARD TABLE OF REF TO zhm_object WITH DEFAULT KEY.
  14. ENDCLASS.
  15.  
  16. CLASS list_iterator DEFINITION INHERITING FROM zhm_object.
  17. PUBLIC SECTION.
  18. METHODS constructor IMPORTING list TYPE REF TO zhm_object.
  19. METHODS print REDEFINITION.
  20. PROTECTED SECTION.
  21. METHODS does_not_understand REDEFINITION.
  22. PRIVATE SECTION.
  23. DATA list TYPE REF TO zhm_object.
  24. ENDCLASS.
  25. CLASS list_iterator IMPLEMENTATION.
  26. METHOD constructor.
  27. super->constructor( ).
  28. me->list = list.
  29. ENDMETHOD.
  30.  
  31. METHOD does_not_understand.
  32. DATA(index) = NEW zhm_integer( 1 ).
  33. WHILE index->lower_or_equal_to( list->get_size( ) )->is_true( ).
  34. DATA(object) = list->get( index ).
  35. object->receive_message( message ).
  36. index ?= index->next( ).
  37. ENDWHILE.
  38. return = me.
  39. ENDMETHOD.
  40.  
  41. METHOD print.
  42. DATA(index) = NEW zhm_integer( 1 ).
  43. WHILE index->lower_or_equal_to( list->get_size( ) )->is_true( ).
  44. DATA(object) = list->get( index ).
  45. object->print( ).
  46. index ?= index->next( ).
  47. ENDWHILE.
  48. return = me.
  49. ENDMETHOD.
  50. ENDCLASS.
  51.  
  52. CLASS list_filter DEFINITION INHERITING FROM zhm_object.
  53. PUBLIC SECTION.
  54. METHODS constructor IMPORTING list TYPE REF TO zhm_object.
  55. PROTECTED SECTION.
  56. METHODS does_not_understand REDEFINITION.
  57. PRIVATE SECTION.
  58. DATA list TYPE REF TO zhm_object.
  59. ENDCLASS.
  60. CLASS list_filter IMPLEMENTATION.
  61. METHOD constructor.
  62. super->constructor( ).
  63. me->list = list.
  64. ENDMETHOD.
  65.  
  66. METHOD does_not_understand.
  67. DATA(new_list) = NEW zhm_list( ).
  68. DATA(index) = NEW zhm_integer( 1 ).
  69. WHILE index->lower_or_equal_to( list->get_size( ) )->is_true( ).
  70. DATA(object) = list->get( index ).
  71. DATA(condition) = object->receive_message( message ).
  72. IF condition->is_true( ).
  73. new_list->add( object ).
  74. ENDIF.
  75. index ?= index->next( ).
  76. ENDWHILE.
  77. return = new_list.
  78. ENDMETHOD.
  79. ENDCLASS.
  80.  
  81. CLASS list_mapper DEFINITION INHERITING FROM zhm_object.
  82. PUBLIC SECTION.
  83. METHODS constructor IMPORTING list TYPE REF TO zhm_object.
  84. PROTECTED SECTION.
  85. METHODS does_not_understand REDEFINITION.
  86. PRIVATE SECTION.
  87. DATA list TYPE REF TO zhm_object.
  88. ENDCLASS.
  89. CLASS list_mapper IMPLEMENTATION.
  90. METHOD constructor.
  91. super->constructor( ).
  92. me->list = list.
  93. ENDMETHOD.
  94.  
  95. METHOD does_not_understand.
  96. DATA(new_list) = NEW zhm_list( ).
  97. DATA(index) = NEW zhm_integer( 1 ).
  98. WHILE index->lower_or_equal_to( list->get_size( ) )->is_true( ).
  99. DATA(object) = list->get( index ).
  100. new_list->add( object->receive_message( message ) ).
  101. index ?= index->next( ).
  102. ENDWHILE.
  103. return = new_list.
  104. ENDMETHOD.
  105. ENDCLASS.
  106.  
  107. CLASS list_filtered_iterator DEFINITION INHERITING FROM list_filter.
  108. PROTECTED SECTION.
  109. METHODS does_not_understand REDEFINITION.
  110. ENDCLASS.
  111. CLASS list_filtered_iterator IMPLEMENTATION.
  112. METHOD does_not_understand.
  113. return = super->does_not_understand( message )->for_each( ).
  114. ENDMETHOD.
  115. ENDCLASS.
  116.  
  117. CLASS ZHM_LIST IMPLEMENTATION.
  118.  
  119.  
  120. * <SIGNATURE>---------------------------------------------------------------------------------------+
  121. * | Instance Public Method ZHM_LIST->ADD
  122. * +-------------------------------------------------------------------------------------------------+
  123. * | [--->] VALUE TYPE REF TO ZHM_OBJECT
  124. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  125. * +--------------------------------------------------------------------------------------</SIGNATURE>
  126. METHOD add.
  127. APPEND value TO primitive_list.
  128. return = me.
  129. ENDMETHOD.
  130.  
  131.  
  132. * <SIGNATURE>---------------------------------------------------------------------------------------+
  133. * | Instance Public Method ZHM_LIST->FOR_EACH
  134. * +-------------------------------------------------------------------------------------------------+
  135. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  136. * +--------------------------------------------------------------------------------------</SIGNATURE>
  137. METHOD for_each.
  138. return = NEW list_iterator( me ).
  139. ENDMETHOD.
  140.  
  141.  
  142. * <SIGNATURE>---------------------------------------------------------------------------------------+
  143. * | Instance Public Method ZHM_LIST->FOR_EACH_WHERE
  144. * +-------------------------------------------------------------------------------------------------+
  145. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  146. * +--------------------------------------------------------------------------------------</SIGNATURE>
  147. METHOD for_each_where.
  148. return = NEW list_filtered_iterator( me ).
  149. ENDMETHOD.
  150.  
  151.  
  152. * <SIGNATURE>---------------------------------------------------------------------------------------+
  153. * | Instance Public Method ZHM_LIST->GET
  154. * +-------------------------------------------------------------------------------------------------+
  155. * | [--->] KEY TYPE REF TO ZHM_OBJECT
  156. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  157. * +--------------------------------------------------------------------------------------</SIGNATURE>
  158. METHOD get.
  159. DATA(index) = key->to_primitive_integer( ).
  160. return = primitive_list[ index ].
  161. ENDMETHOD.
  162.  
  163.  
  164. * <SIGNATURE>---------------------------------------------------------------------------------------+
  165. * | Instance Public Method ZHM_LIST->GET_LAST
  166. * +-------------------------------------------------------------------------------------------------+
  167. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  168. * +--------------------------------------------------------------------------------------</SIGNATURE>
  169. METHOD get_last.
  170. DATA(last_index) = lines( primitive_list ).
  171. return = primitive_list[ last_index ].
  172. ENDMETHOD.
  173.  
  174.  
  175. * <SIGNATURE>---------------------------------------------------------------------------------------+
  176. * | Instance Public Method ZHM_LIST->GET_SIZE
  177. * +-------------------------------------------------------------------------------------------------+
  178. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  179. * +--------------------------------------------------------------------------------------</SIGNATURE>
  180. METHOD get_size.
  181. return = NEW zhm_integer( lines( primitive_list ) ).
  182. ENDMETHOD.
  183.  
  184.  
  185. * <SIGNATURE>---------------------------------------------------------------------------------------+
  186. * | Instance Public Method ZHM_LIST->MAP
  187. * +-------------------------------------------------------------------------------------------------+
  188. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  189. * +--------------------------------------------------------------------------------------</SIGNATURE>
  190. METHOD map.
  191. return = NEW list_mapper( me ).
  192. ENDMETHOD.
  193.  
  194.  
  195. * <SIGNATURE>---------------------------------------------------------------------------------------+
  196. * | Instance Public Method ZHM_LIST->SUM
  197. * +-------------------------------------------------------------------------------------------------+
  198. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  199. * +--------------------------------------------------------------------------------------</SIGNATURE>
  200. METHOD sum.
  201. DATA(total) = NEW zhm_integer( 0 ).
  202. DATA(index) = NEW zhm_integer( 1 ).
  203. WHILE index->lower_or_equal_to( me->get_size( ) )->is_true( ).
  204. DATA(object) = me->get( index ).
  205. total ?= total->plus( object ).
  206. index ?= index->next( ).
  207. ENDWHILE.
  208. return = total.
  209. ENDMETHOD.
  210.  
  211.  
  212. * <SIGNATURE>---------------------------------------------------------------------------------------+
  213. * | Instance Public Method ZHM_LIST->WHERE
  214. * +-------------------------------------------------------------------------------------------------+
  215. * | [<-()] RETURN TYPE REF TO ZHM_OBJECT
  216. * +--------------------------------------------------------------------------------------</SIGNATURE>
  217. METHOD where.
  218. return = NEW list_filter( me ).
  219. ENDMETHOD.
  220. ENDCLASS.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement