add collection classes (#883)

* add collection classes

first step of #880

* pp
This commit is contained in:
Lars Hvam 2021-11-07 20:33:46 +01:00 committed by GitHub
parent 74345edd32
commit d80521c747
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 206 additions and 0 deletions

View File

@ -0,0 +1,84 @@
CLASS zcl_excel_collection DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
TYPES:
ty_collection TYPE STANDARD TABLE OF REF TO object .
DATA collection TYPE ty_collection READ-ONLY .
METHODS size
RETURNING
VALUE(size) TYPE i .
METHODS is_empty
RETURNING
VALUE(is_empty) TYPE abap_bool .
METHODS get
IMPORTING
!index TYPE i
RETURNING
VALUE(object) TYPE REF TO object .
METHODS get_iterator
RETURNING
VALUE(iterator) TYPE REF TO zcl_excel_collection_iterator .
METHODS add
IMPORTING
!element TYPE REF TO object .
METHODS remove
IMPORTING
!element TYPE REF TO object .
METHODS clear .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_EXCEL_COLLECTION IMPLEMENTATION.
METHOD add .
APPEND element TO collection.
ENDMETHOD.
METHOD clear .
CLEAR collection.
ENDMETHOD.
METHOD get .
READ TABLE collection INDEX index INTO object.
ENDMETHOD.
METHOD get_iterator .
CREATE OBJECT iterator
EXPORTING
collection = me.
ENDMETHOD.
METHOD is_empty.
is_empty = boolc( size( ) = 0 ).
ENDMETHOD.
METHOD remove .
DATA obj TYPE REF TO object.
LOOP AT collection INTO obj.
IF obj = element.
DELETE collection.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD size.
size = lines( collection ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,37 @@
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
METHODS test01 FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD test01.
DATA lo_collection TYPE REF TO zcl_excel_collection.
CREATE OBJECT lo_collection.
cl_abap_unit_assert=>assert_equals(
act = lo_collection->size( )
exp = 0 ).
cl_abap_unit_assert=>assert_equals(
act = lo_collection->is_empty( )
exp = abap_true ).
* heh, yea, add the collection to itself :)
lo_collection->add( lo_collection ).
cl_abap_unit_assert=>assert_equals(
act = lo_collection->size( )
exp = 1 ).
cl_abap_unit_assert=>assert_equals(
act = lo_collection->is_empty( )
exp = abap_false ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_COLLECTION</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2xlsx - Object Collection</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,52 @@
CLASS zcl_excel_collection_iterator DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS get_index
RETURNING
VALUE(index) TYPE i.
METHODS has_next
RETURNING
VALUE(has_next) TYPE abap_bool.
METHODS get_next
RETURNING
VALUE(object) TYPE REF TO object.
METHODS constructor
IMPORTING
collection TYPE REF TO zCL_excel_COLLECTION.
PROTECTED SECTION.
PRIVATE SECTION.
DATA index TYPE i VALUE 0.
DATA collection TYPE REF TO zcl_excel_collection.
ENDCLASS.
CLASS ZCL_EXCEL_COLLECTION_ITERATOR IMPLEMENTATION.
METHOD constructor .
me->collection = collection.
ENDMETHOD.
METHOD get_index .
index = me->index.
ENDMETHOD.
METHOD get_next .
DATA obj TYPE REF TO object.
index = index + 1.
object = collection->get( index ).
ENDMETHOD.
METHOD has_next.
DATA obj TYPE REF TO object.
obj = collection->get( index + 1 ).
has_next = boolc( obj IS NOT INITIAL ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_COLLECTION_ITERATOR</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2xlsx - Object Iterator</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>