Merge pull request #544 from Pacojka/master

Performance improvement for GET_ROW/GET_COLUMN
This commit is contained in:
Ivan 2018-07-16 22:35:33 -05:00 committed by GitHub
commit 56f6fafe77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 4146 additions and 4122 deletions

View File

@ -5,7 +5,13 @@ class ZCL_EXCEL_COLUMNS definition
*"* public components of class ZCL_EXCEL_COLUMNS
*"* do not include other source files here!!!
public section.
public section.
types:
begin of MTY_S_HASHED_COLUMN,
COLUMN_INDEX type INT4,
COLUMN type ref to ZCL_EXCEL_COLUMN,
end of MTY_S_HASHED_COLUMN ,
MTY_TS_HASEHD_COLUMN type hashed table of MTY_S_HASHED_COLUMN with unique key COLUMN_INDEX.
methods ADD
importing
@ -31,12 +37,13 @@ public section.
value(EP_SIZE) type I .
*"* protected components of class ZABAP_EXCEL_WORKSHEETS
*"* do not include other source files here!!!
protected section.
protected section.
*"* private components of class ZABAP_EXCEL_RANGES
*"* do not include other source files here!!!
private section.
private section.
data COLUMNS type ref to CL_OBJECT_COLLECTION .
data COLUMNS_HASEHD type MTY_TS_HASEHD_COLUMN .
ENDCLASS.
@ -44,44 +51,58 @@ ENDCLASS.
CLASS ZCL_EXCEL_COLUMNS IMPLEMENTATION.
METHOD add.
columns->add( io_column ).
ENDMETHOD.
method ADD.
data: LS_HASHED_COLUMN type MTY_S_HASHED_COLUMN.
LS_HASHED_COLUMN-COLUMN_INDEX = IO_COLUMN->GET_COLUMN_INDEX( ).
LS_HASHED_COLUMN-COLUMN = IO_COLUMN.
insert LS_HASHED_COLUMN into table COLUMNS_HASEHD .
COLUMNS->ADD( IO_COLUMN ).
endmethod.
METHOD clear.
columns->clear( ).
ENDMETHOD.
method CLEAR.
clear COLUMNS_HASEHD.
COLUMNS->CLEAR( ).
endmethod.
METHOD constructor.
method CONSTRUCTOR.
CREATE OBJECT columns.
create object COLUMNS.
ENDMETHOD.
endmethod.
METHOD get.
eo_column ?= columns->if_object_collection~get( ip_index ).
ENDMETHOD.
method GET.
field-symbols: <LS_HASHED_COLUMN> type MTY_S_HASHED_COLUMN.
read table COLUMNS_HASEHD with key COLUMN_INDEX = IP_INDEX assigning <LS_HASHED_COLUMN>.
if SY-SUBRC = 0.
EO_COLUMN = <LS_HASHED_COLUMN>-COLUMN.
endif.
endmethod.
METHOD get_iterator.
eo_iterator ?= columns->if_object_collection~get_iterator( ).
ENDMETHOD.
method GET_ITERATOR.
EO_ITERATOR ?= COLUMNS->IF_OBJECT_COLLECTION~GET_ITERATOR( ).
endmethod.
METHOD is_empty.
is_empty = columns->if_object_collection~is_empty( ).
ENDMETHOD.
method IS_EMPTY.
IS_EMPTY = COLUMNS->IF_OBJECT_COLLECTION~IS_EMPTY( ).
endmethod.
METHOD remove.
columns->remove( io_column ).
ENDMETHOD.
method REMOVE.
delete table COLUMNS_HASEHD with table key COLUMN_INDEX = IO_COLUMN->GET_COLUMN_INDEX( ) .
COLUMNS->REMOVE( IO_COLUMN ).
endmethod.
METHOD size.
ep_size = columns->if_object_collection~size( ).
ENDMETHOD.
method SIZE.
EP_SIZE = COLUMNS->IF_OBJECT_COLLECTION~SIZE( ).
endmethod.
ENDCLASS.

View File

@ -12,7 +12,13 @@ class ZCL_EXCEL_ROWS definition
*"* do not include other source files here!!!
*"* protected components of class ZABAP_EXCEL_WORKSHEETS
*"* do not include other source files here!!!
public section.
public section.
types:
begin of MTY_S_HASHED_ROW,
ROW_INDEX type INT4,
ROW type ref to ZCL_EXCEL_ROW,
end of MTY_S_HASHED_ROW ,
MTY_TS_HASEHD_ROW type hashed table of MTY_S_HASHED_ROW with unique key ROW_INDEX.
methods ADD
importing
@ -36,12 +42,14 @@ public section.
methods SIZE
returning
value(EP_SIZE) type I .
PROTECTED SECTION.
protected section.
*"* private components of class ZABAP_EXCEL_RANGES
*"* do not include other source files here!!!
PRIVATE SECTION.
private section.
data ROWS type ref to CL_OBJECT_COLLECTION .
data ROWS_HASEHD type MTY_TS_HASEHD_ROW .
DATA rows TYPE REF TO cl_object_collection .
ENDCLASS.
@ -49,44 +57,58 @@ ENDCLASS.
CLASS ZCL_EXCEL_ROWS IMPLEMENTATION.
METHOD add.
rows->add( io_row ).
ENDMETHOD. "ADD
method ADD.
data: LS_HASHED_ROW type MTY_S_HASHED_ROW.
LS_HASHED_ROW-ROW_INDEX = IO_ROW->GET_ROW_INDEX( ).
LS_HASHED_ROW-ROW = IO_ROW.
insert LS_HASHED_ROW into table ROWS_HASEHD.
ROWS->ADD( IO_ROW ).
endmethod. "ADD
METHOD clear.
rows->clear( ).
ENDMETHOD. "CLEAR
method CLEAR.
clear ROWS_HASEHD.
ROWS->CLEAR( ).
endmethod. "CLEAR
METHOD constructor.
method CONSTRUCTOR.
CREATE OBJECT rows.
create object ROWS.
ENDMETHOD. "CONSTRUCTOR
endmethod. "CONSTRUCTOR
METHOD get.
eo_row ?= rows->if_object_collection~get( ip_index ).
ENDMETHOD. "GET
method GET.
field-symbols: <LS_HASHED_ROW> type MTY_S_HASHED_ROW.
read table ROWS_HASEHD with key ROW_INDEX = IP_INDEX assigning <LS_HASHED_ROW>.
if SY-SUBRC = 0.
EO_ROW = <LS_HASHED_ROW>-ROW.
endif.
endmethod. "GET
METHOD get_iterator.
eo_iterator ?= rows->if_object_collection~get_iterator( ).
ENDMETHOD. "GET_ITERATOR
method GET_ITERATOR.
EO_ITERATOR ?= ROWS->IF_OBJECT_COLLECTION~GET_ITERATOR( ).
endmethod. "GET_ITERATOR
METHOD is_empty.
is_empty = rows->if_object_collection~is_empty( ).
ENDMETHOD. "IS_EMPTY
method IS_EMPTY.
IS_EMPTY = ROWS->IF_OBJECT_COLLECTION~IS_EMPTY( ).
endmethod. "IS_EMPTY
METHOD remove.
rows->remove( io_row ).
ENDMETHOD. "REMOVE
method REMOVE.
delete table ROWS_HASEHD with table key ROW_INDEX = IO_ROW->GET_ROW_INDEX( ) .
ROWS->REMOVE( IO_ROW ).
endmethod. "REMOVE
METHOD size.
ep_size = rows->if_object_collection~size( ).
ENDMETHOD. "SIZE
method SIZE.
EP_SIZE = ROWS->IF_OBJECT_COLLECTION~SIZE( ).
endmethod. "SIZE
ENDCLASS.

File diff suppressed because it is too large Load Diff