mirror of
https://github.com/abap2xlsx/abap2xlsx.git
synced 2025-05-05 13:46:17 +08:00
Merge pull request #532 from ivanfemia/revert-529-bilencekic-patch-1
Revert "Performance improvement for GET_ROW method"
This commit is contained in:
commit
399c614e25
|
@ -3,51 +3,45 @@
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS ZCL_EXCEL_ROWS DEFINITION
|
class ZCL_EXCEL_ROWS definition
|
||||||
PUBLIC
|
public
|
||||||
FINAL
|
final
|
||||||
CREATE PUBLIC .
|
create public .
|
||||||
|
|
||||||
|
|
||||||
*"* public components of class ZCL_EXCEL_ROWS
|
*"* public components of class ZCL_EXCEL_ROWS
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
*"* protected components of class ZABAP_EXCEL_WORKSHEETS
|
*"* protected components of class ZABAP_EXCEL_WORKSHEETS
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
PUBLIC SECTION.
|
public section.
|
||||||
TYPES:
|
|
||||||
BEGIN OF T_ROWS, " performance improvement #527
|
|
||||||
ROW_INDEX TYPE INT4,
|
|
||||||
ROW TYPE REF TO ZCL_EXCEL_ROW,
|
|
||||||
END OF T_ROWS.
|
|
||||||
|
|
||||||
DATA:
|
methods ADD
|
||||||
DT_ROWS TYPE HASHED TABLE OF T_ROWS WITH UNIQUE KEY ROW_INDEX READ-ONLY.
|
importing
|
||||||
|
!IO_ROW type ref to ZCL_EXCEL_ROW .
|
||||||
METHODS ADD
|
methods CLEAR .
|
||||||
IMPORTING
|
methods CONSTRUCTOR .
|
||||||
!IO_ROW TYPE REF TO ZCL_EXCEL_ROW .
|
methods GET
|
||||||
METHODS CLEAR .
|
importing
|
||||||
METHODS CONSTRUCTOR .
|
!IP_INDEX type I
|
||||||
METHODS GET
|
returning
|
||||||
IMPORTING
|
value(EO_ROW) type ref to ZCL_EXCEL_ROW .
|
||||||
!IP_INDEX TYPE I
|
methods GET_ITERATOR
|
||||||
RETURNING
|
returning
|
||||||
VALUE(EO_ROW) TYPE REF TO ZCL_EXCEL_ROW .
|
value(EO_ITERATOR) type ref to CL_OBJECT_COLLECTION_ITERATOR .
|
||||||
METHODS IS_EMPTY
|
methods IS_EMPTY
|
||||||
RETURNING
|
returning
|
||||||
VALUE(IS_EMPTY) TYPE FLAG .
|
value(IS_EMPTY) type FLAG .
|
||||||
METHODS REMOVE
|
methods REMOVE
|
||||||
IMPORTING
|
importing
|
||||||
!IO_ROW TYPE REF TO ZCL_EXCEL_ROW .
|
!IO_ROW type ref to ZCL_EXCEL_ROW .
|
||||||
METHODS SIZE
|
methods SIZE
|
||||||
RETURNING
|
returning
|
||||||
VALUE(EP_SIZE) TYPE I .
|
value(EP_SIZE) type I .
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
*"* private components of class ZABAP_EXCEL_RANGES
|
*"* private components of class ZABAP_EXCEL_RANGES
|
||||||
*"* do not include other source files here!!!
|
*"* do not include other source files here!!!
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
DATA ROWS TYPE REF TO CL_OBJECT_COLLECTION .
|
DATA rows TYPE REF TO cl_object_collection .
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,89 +49,44 @@ ENDCLASS.
|
||||||
CLASS ZCL_EXCEL_ROWS IMPLEMENTATION.
|
CLASS ZCL_EXCEL_ROWS IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD add.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->ADD
|
rows->add( io_row ).
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
|
||||||
* | [--->] IO_ROW TYPE REF TO ZCL_EXCEL_ROW
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD ADD.
|
|
||||||
|
|
||||||
DATA:
|
|
||||||
LS_ROW TYPE T_ROWS.
|
|
||||||
LS_ROW-ROW_INDEX = IO_ROW->GET_ROW_INDEX( ).
|
|
||||||
LS_ROW-ROW = IO_ROW.
|
|
||||||
INSERT LS_ROW INTO TABLE DT_ROWS.
|
|
||||||
|
|
||||||
ENDMETHOD. "ADD
|
ENDMETHOD. "ADD
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD clear.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->CLEAR
|
rows->clear( ).
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD CLEAR.
|
|
||||||
CLEAR DT_ROWS[].
|
|
||||||
|
|
||||||
ENDMETHOD. "CLEAR
|
ENDMETHOD. "CLEAR
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD constructor.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->CONSTRUCTOR
|
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD CONSTRUCTOR.
|
|
||||||
|
|
||||||
CREATE OBJECT ROWS.
|
CREATE OBJECT rows.
|
||||||
|
|
||||||
ENDMETHOD. "CONSTRUCTOR
|
ENDMETHOD. "CONSTRUCTOR
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD get.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->GET
|
eo_row ?= rows->if_object_collection~get( ip_index ).
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
|
||||||
* | [--->] IP_INDEX TYPE I
|
|
||||||
* | [<-()] EO_ROW TYPE REF TO ZCL_EXCEL_ROW
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD GET.
|
|
||||||
READ TABLE DT_ROWS ASSIGNING FIELD-SYMBOL(<LS_ROW>) WITH TABLE KEY ROW_INDEX = IP_INDEX.
|
|
||||||
IF SY-SUBRC = 0.
|
|
||||||
EO_ROW ?= <LS_ROW>-ROW.
|
|
||||||
ENDIF.
|
|
||||||
ENDMETHOD. "GET
|
ENDMETHOD. "GET
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD get_iterator.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->IS_EMPTY
|
eo_iterator ?= rows->if_object_collection~get_iterator( ).
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
ENDMETHOD. "GET_ITERATOR
|
||||||
* | [<-()] IS_EMPTY TYPE FLAG
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD IS_EMPTY.
|
|
||||||
DATA(LV_LINES) = LINES( DT_ROWS ).
|
|
||||||
|
|
||||||
IF LV_LINES = 0.
|
|
||||||
IS_EMPTY = abap_true.
|
METHOD is_empty.
|
||||||
ELSE.
|
is_empty = rows->if_object_collection~is_empty( ).
|
||||||
IS_EMPTY = abap_false.
|
|
||||||
ENDIF.
|
|
||||||
ENDMETHOD. "IS_EMPTY
|
ENDMETHOD. "IS_EMPTY
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD remove.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->REMOVE
|
rows->remove( io_row ).
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
|
||||||
* | [--->] IO_ROW TYPE REF TO ZCL_EXCEL_ROW
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD REMOVE.
|
|
||||||
DELETE DT_ROWS WHERE ROW_INDEX = IO_ROW->GET_ROW_INDEX( ).
|
|
||||||
ENDMETHOD. "REMOVE
|
ENDMETHOD. "REMOVE
|
||||||
|
|
||||||
|
|
||||||
* <SIGNATURE>---------------------------------------------------------------------------------------+
|
METHOD size.
|
||||||
* | Instance Public Method ZCL_EXCEL_ROWS->SIZE
|
ep_size = rows->if_object_collection~size( ).
|
||||||
* +-------------------------------------------------------------------------------------------------+
|
|
||||||
* | [<-()] EP_SIZE TYPE I
|
|
||||||
* +--------------------------------------------------------------------------------------</SIGNATURE>
|
|
||||||
METHOD SIZE.
|
|
||||||
EP_SIZE = LINES( DT_ROWS )..
|
|
||||||
ENDMETHOD. "SIZE
|
ENDMETHOD. "SIZE
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -4098,14 +4098,20 @@ method GET_RANGES_ITERATOR.
|
||||||
|
|
||||||
METHOD get_row.
|
METHOD get_row.
|
||||||
|
|
||||||
* performance improvement for issue #527
|
DATA: lo_row_iterator TYPE REF TO cl_object_collection_iterator,
|
||||||
READ TABLE ROWS->DT_ROWS ASSIGNING FIELD-SYMBOL(<LS_ROW>) WITH TABLE KEY ROW_INDEX = IP_ROW.
|
lo_row TYPE REF TO zcl_excel_row.
|
||||||
IF SY-SUBRC = 0.
|
|
||||||
EO_ROW = <LS_ROW>-ROW.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF EO_ROW IS NOT BOUND.
|
lo_row_iterator = me->get_rows_iterator( ).
|
||||||
EO_ROW = ME->ADD_NEW_ROW( IP_ROW ).
|
WHILE lo_row_iterator->has_next( ) = abap_true.
|
||||||
|
lo_row ?= lo_row_iterator->get_next( ).
|
||||||
|
IF lo_row->get_row_index( ) = ip_row.
|
||||||
|
eo_row = lo_row.
|
||||||
|
EXIT.
|
||||||
|
ENDIF.
|
||||||
|
ENDWHILE.
|
||||||
|
|
||||||
|
IF eo_row IS NOT BOUND.
|
||||||
|
eo_row = me->add_new_row( ip_row ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user