Additional Blogs by SAP
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

I'm accustomed to use array and matrix, so I implemented a couple of class in ABAP that provide them.

class ZMLA_ARRAY_I definition
   public
   create public .
public section.
*"* public components of class ZMLA_ARRAY_I
*"* do not include other source files here!!!
   methods CONSTRUCTOR
     importing
       value(SIZE) type I .
   methods GET
     importing
       value(IX) type I
     returning
       value(RET) type I .
   methods SIZE
     returning
       value(RET) type I .
   methods SET
     importing
       value(IX) type I
       value(VAL) type I default 0 .
   methods SET_VALUES
     importing
       value(START) type I
       value(VALS) type STRING optional .
   protected section.
private section.
*"* private components of class ZMLA_ARRAY_I
*"* do not include other source files here!!!
   data ARRAY type STANDARD TABLE OF i .
ENDCLASS.
CLASS ZMLA_ARRAY_I IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_ARRAY_I->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] SIZE                           TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method CONSTRUCTOR.
     DO SIZE TIMES.
         append 0 to array.
     ENDDO.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_ARRAY_I->GET
* +-------------------------------------------------------------------------------------------------+
* | [--->] IX                             TYPE        I
* | [<-()] RET                            TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method GET.
     read table array index ix + 1 into ret.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_ARRAY_I->SET
* +-------------------------------------------------------------------------------------------------+
* | [--->] IX                             TYPE        I
* | [--->] VAL                            TYPE        I (default =0)
* +--------------------------------------------------------------------------------------</SIGNATURE>
method SET.
     modify array from val index ix + 1.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_ARRAY_I->SET_VALUES
* +-------------------------------------------------------------------------------------------------+
* | [--->] START                          TYPE        I
* | [--->] VALS                           TYPE        STRING(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
method SET_VALUES.
     DATA: stab TYPE TABLE OF STRING,
           s    TYPE          STRING,
           val  TYPE          i,
           ix   TYPE          i.
     SPLIT VALS AT ' ' INTO TABLE stab.
     ix = start.
     LOOP AT stab INTO s.
         val = s.
         me->set( IX  = ix
                  VAL = VAL ).
         ix = ix + 1.
     ENDLOOP.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_ARRAY_I->SIZE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RET                            TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method SIZE.
     ret = lines( array ).
endmethod.
ENDCLASS.

class ZMLA_MATRIX_I definition
   public
   create public .
public section.
*"* public components of class ZMLA_MATRIX_I
*"* do not include other source files here!!!
   methods CONSTRUCTOR
     importing
       value(XSIZE) type I
       value(YSIZE) type I .
   methods GET
     importing
       value(X) type I
       value(Y) type I
     returning
       value(RET) type I .
   methods GET_XSIZE
     returning
       value(RET) type I .
   methods GET_YSIZE
     returning
       value(RET) type I .
   methods SET
     importing
       value(X) type I
       value(Y) type I
       value(VAL) type I default 0 .
   methods SET_ROW
     importing
       value(ROW) type I
       value(VALS) type STRING optional .
   protected section.
private section.
*"* private components of class ZMLA_MATRIX_I
*"* do not include other source files here!!!
   data XSIZE type I .
   data YSIZE type I .
   data ARRAY type ref to ZMLA_ARRAY_I .
ENDCLASS.
CLASS ZMLA_MATRIX_I IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_MATRIX_I->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] XSIZE                          TYPE        I
* | [--->] YSIZE                          TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method CONSTRUCTOR.
   me->xsize = xsize.
   me->ysize = ysize.
   CREATE OBJECT me->array EXPORTING SIZE = xsize * ysize.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_MATRIX_I->GET
* +-------------------------------------------------------------------------------------------------+
* | [--->] X                              TYPE        I
* | [--->] Y                              TYPE        I
* | [<-()] RET                            TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method GET.
     ret = me->array->get( IX = me->xsize * X + Y ).
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_MATRIX_I->GET_XSIZE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RET                            TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method GET_XSIZE.
     ret = me->xsize.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_MATRIX_I->GET_YSIZE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RET                            TYPE        I
* +--------------------------------------------------------------------------------------</SIGNATURE>
method GET_YSIZE.
     ret = me->ysize.
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_MATRIX_I->SET
* +-------------------------------------------------------------------------------------------------+
* | [--->] X                              TYPE        I
* | [--->] Y                              TYPE        I
* | [--->] VAL                            TYPE        I (default =0)
* +--------------------------------------------------------------------------------------</SIGNATURE>
method SET.
     me->array->set( IX  = me->xsize * X + Y
                     VAL = VAL ).
endmethod.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZMLA_MATRIX_I->SET_ROW
* +-------------------------------------------------------------------------------------------------+
* | [--->] ROW                            TYPE        I
* | [--->] VALS                           TYPE        STRING(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
method SET_ROW.
     me->ARRAY->SET_VALUES( START = me->xsize * ROW
                            VALS  = VALS ).  "MLA: check che il numero di elementi sia consistente.
endmethod.
ENDCLASS.