wizards/source/sfdocuments/SF_Base.xba |    2 --
 wizards/source/sfdocuments/SF_Calc.xba |   24 ++++++++++++++++++++++--
 2 files changed, 22 insertions(+), 4 deletions(-)

New commits:
commit 393d8629be64fc01271fd746938bb822020f64b9
Author:     Jean-Pierre Ledure <j...@ledure.be>
AuthorDate: Thu Nov 4 15:42:16 2021 +0100
Commit:     Jean-Pierre Ledure <j...@ledure.be>
CommitDate: Thu Nov 4 16:57:37 2021 +0100

    ScriptForge - (SF_Calc) _ParseAddress() reuse last parsed address
    
    Implementation to improve performance of a simple
    cache of the last already parsed range.
    
    The address is reused when the sheet name is explicit and that
    the range to parse, as a string, is identical to the
    previous parsing request.
    
    Change-Id: I0137689e9697686e76e07e037129983baba6ecfb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124711
    Tested-by: Jean-Pierre Ledure <j...@ledure.be>
    Tested-by: Jenkins
    Reviewed-by: Jean-Pierre Ledure <j...@ledure.be>

diff --git a/wizards/source/sfdocuments/SF_Base.xba 
b/wizards/source/sfdocuments/SF_Base.xba
index ae2a23e9f0d3..efdc57be9b4d 100644
--- a/wizards/source/sfdocuments/SF_Base.xba
+++ b/wizards/source/sfdocuments/SF_Base.xba
@@ -604,8 +604,6 @@ Public Function SetPrinter(Optional ByVal FormDocument As 
Variant _
 &apos;&apos;&apos;             PaperFormat: one of next values
 &apos;&apos;&apos;                     &quot;A3&quot;, &quot;A4&quot;, 
&quot;A5&quot;, &quot;B4&quot;, &quot;B5&quot;, &quot;LETTER&quot;, 
&quot;LEGAL&quot;, &quot;TABLOID&quot;
 &apos;&apos;&apos;                     Left unchanged when absent
-&apos;&apos;&apos;             _PrintComponent: undocumented argument to 
determine the component
-&apos;&apos;&apos;                     Useful typically to apply printer 
settings on a Base form document
 &apos;&apos;&apos;     Returns:
 &apos;&apos;&apos;             True when successful
 &apos;&apos;&apos;     Examples:
diff --git a/wizards/source/sfdocuments/SF_Calc.xba 
b/wizards/source/sfdocuments/SF_Calc.xba
index 38ef4e843cef..96dd08d5562c 100644
--- a/wizards/source/sfdocuments/SF_Calc.xba
+++ b/wizards/source/sfdocuments/SF_Calc.xba
@@ -111,6 +111,8 @@ Type _Address
        XCellRange                                      As Object               
&apos;  com.sun.star.table.XCellRange
 End Type
 
+Private _LastParsedAddress             As Object               &apos;  
_Address type - parsed ranges are cached
+
 REM ============================================================ MODULE 
CONSTANTS
 
 Private Const cstSHEET                 = 1
@@ -135,6 +137,7 @@ Private Sub Class_Initialize()
        ObjectType = &quot;CALC&quot;
        ServiceName = &quot;SFDocuments.Calc&quot;
        Set _Component = Nothing
+       Set _LastParsedAddress = Nothing
 End Sub                &apos;  SFDocuments.SF_Calc Constructor
 
 REM 
-----------------------------------------------------------------------------
@@ -3379,7 +3382,7 @@ Private Function _ParseAddress(ByVal psAddress As String) 
As Object
 &apos;&apos;&apos;     Exceptions:
 &apos;&apos;&apos;             CALCADDRESSERROR                &apos;  Address 
could not be parsed to a valid address
 
-Dim oAddress As _Address                       &apos;  Return value
+Dim oAddress As Object                         &apos;  Return value
 Dim lStart As Long                                     &apos;  Position of 
found regex
 Dim sSheet As String                           &apos;  Sheet component
 Dim sRange As String                           &apos;  Range component
@@ -3389,6 +3392,20 @@ Dim oRangeAddress As Object                      &apos;  
Alias for rangeaddress
 Dim vLastCell As Variant                       &apos;  Result of _LastCell() 
method
 Dim oSelect As Object                          &apos;  Current selection
 
+       &apos;  If psAddress has already been parsed, get the result back
+       If Not IsNull(_LastParsedAddress) Then
+               &apos;  Given argument must contain an explicit reference to a 
sheet
+               If (InStr(psAddress, &quot;~.&quot;) = 0 And InStr(psAddress, 
&quot;.&quot;) &gt; 0 And psAddress = _LastParsedAddress.RawAddress) _
+                               Or psAddress = _LastParsedAddress.RangeName Then
+                       Set _ParseAddress = _LastParsedAddress
+                       Exit Function
+               Else
+                       Set _LastParsedAddress = Nothing
+               End If
+       End If
+
+       &apos;  Reinitialize a new _Address object
+       Set oAddress = New _Address
        With oAddress
                sSheet = &quot;&quot;                           :       sRange 
= &quot;&quot;
                .SheetName = &quot;&quot;                       :       
.RangeName = &quot;&quot;
@@ -3477,6 +3494,9 @@ Dim oSelect As Object                             &apos;  
Current selection
 
        End With
 
+       &apos;  Store last parsed address for reuse
+       Set _LastParsedAddress = oAddress
+
 Finally:
        Set _ParseAddress = oAddress
        Exit Function
@@ -3736,4 +3756,4 @@ CatchDuplicate:
 End Function   &apos;  SFDocuments.SF_Calc._ValidateSheet
 
 REM ============================================ END OF SFDOCUMENTS.SF_CALC
-</script:module>
+</script:module>
\ No newline at end of file

Reply via email to