i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx |    9 -
 i18npool/source/localedata/LocaleNode.cxx                             |    6 
 i18npool/source/localedata/localedata.cxx                             |   52 
++++--
 i18npool/source/nativenumber/nativenumbersupplier.cxx                 |   69 
++++----
 i18npool/source/search/textsearch.cxx                                 |   84 
+++++-----
 i18npool/source/textconversion/textconversion_ko.cxx                  |    6 
 i18npool/source/textconversion/textconversion_zh.cxx                  |   11 -
 i18npool/source/transliteration/textToPronounce_zh.cxx                |    9 -
 i18npool/source/transliteration/transliterationImpl.cxx               |   18 +-
 i18npool/source/transliteration/transliteration_Numeric.cxx           |   17 +-
 10 files changed, 154 insertions(+), 127 deletions(-)

New commits:
commit 45de43ce9f1441735817fa82924ddc4508d221cd
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri Oct 29 09:46:05 2021 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Sat Oct 30 10:55:23 2021 +0200

    Prepare for removal of non-const operator[] from Sequence in i18npool
    
    Change-Id: Ib4c59c45098376f2e0a610a8ffefb4af5306bd6d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124372
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git 
a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx 
b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
index e5d631e3e1e5..831b502a2771 100644
--- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
+++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
@@ -1121,11 +1121,12 @@ OUString 
DefaultNumberingProvider::makeNumberingIdentifier(sal_Int16 index)
         OUStringBuffer result;
         Locale aLocale("en", OUString(), OUString());
         Sequence<beans::PropertyValue> aProperties(2);
-        aProperties[0].Name = "NumberingType";
-        aProperties[0].Value <<= aSupportedTypes[index].nType;
-        aProperties[1].Name = "Value";
+        auto aPropertiesRange = asNonConstRange(aProperties);
+        aPropertiesRange[0].Name = "NumberingType";
+        aPropertiesRange[0].Value <<= aSupportedTypes[index].nType;
+        aPropertiesRange[1].Name = "Value";
         for (sal_Int32 j = 1; j <= 3; j++) {
-            aProperties[1].Value <<= j;
+            aPropertiesRange[1].Value <<= j;
             result.append( makeNumberingString( aProperties, aLocale ) );
             result.append(", ");
         }
diff --git a/i18npool/source/localedata/LocaleNode.cxx 
b/i18npool/source/localedata/LocaleNode.cxx
index 86fc96495bd4..f4c0aaefdc94 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -2364,10 +2364,12 @@ void LCOutlineNumberingLevelNode::generateCode (const 
OFileWriter &of) const
 Attr::Attr (const Reference< XAttributeList > & attr) {
     sal_Int16 len = attr->getLength();
     name.realloc (len);
+    auto pName = name.getArray();
     value.realloc (len);
+    auto pValue = value.getArray();
     for (sal_Int16 i =0; i< len;i++) {
-        name[i] = attr->getNameByIndex(i);
-        value[i] = attr -> getValueByIndex(i);
+        pName[i] = attr->getNameByIndex(i);
+        pValue[i] = attr -> getValueByIndex(i);
     }
 }
 
diff --git a/i18npool/source/localedata/localedata.cxx 
b/i18npool/source/localedata/localedata.cxx
index 5aecfa32a7fd..5e8f1dee2f79 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -758,6 +758,7 @@ LocaleDataImpl::getAllCalendars2( const Locale& rLocale )
         allCalendars = func(calendarsCount);
 
         Sequence< Calendar2 > calendarsSeq(calendarsCount);
+        auto calendarsSeqRange = asNonConstRange(calendarsSeq);
         sal_Int16 offset = REF_OFFSET_COUNT;
         for(sal_Int16 i = 0; i < calendarsCount; i++) {
             OUString calendarID(allCalendars[offset]);
@@ -780,7 +781,7 @@ LocaleDataImpl::getAllCalendars2( const Locale& rLocale )
             offset++;
             Calendar2 aCalendar(days, months, gmonths, pmonths, eras, 
startOfWeekDay,
                     minimalDaysInFirstWeek, defaultCalendar, calendarID);
-            calendarsSeq[i] = aCalendar;
+            calendarsSeqRange[i] = aCalendar;
         }
         return calendarsSeq;
     }
@@ -812,6 +813,7 @@ LocaleDataImpl::getAllCurrencies2( const Locale& rLocale )
         sal_Unicode **allCurrencies = func(currencyCount);
 
         Sequence< Currency2 > seq(currencyCount);
+        auto seqRange = asNonConstRange(seq);
         for(int i = 0, nOff = 0; i < currencyCount; i++, nOff += 8 ) {
             Currency2 cur(
                     OUString(allCurrencies[nOff]), // string ID
@@ -823,7 +825,7 @@ LocaleDataImpl::getAllCurrencies2( const Locale& rLocale )
                     allCurrencies[nOff+6][0],   // short DecimalPlaces
                     allCurrencies[nOff+7][0] != 0 // boolean LegacyOnly
                     );
-            seq[i] = cur;
+            seqRange[i] = cur;
         }
         return seq;
     }
@@ -867,6 +869,7 @@ LocaleDataImpl::getAllFormats( const Locale& rLocale )
     formatCount += section[1].getFunc( *this, rLocale, "getAllFormats1");
 
     Sequence< FormatElement > seq(formatCount);
+    auto seqRange = asNonConstRange(seq);
     sal_Int32 f = 0;
     for (const FormatSection & s : section)
     {
@@ -883,7 +886,7 @@ LocaleDataImpl::getAllFormats( const Locale& rLocale )
                         OUString(formatArray[nOff + 4]),
                         formatArray[nOff + 5][0],
                         formatArray[nOff + 6][0] != 0);
-                seq[f] = elem;
+                seqRange[f] = elem;
             }
         }
     }
@@ -901,9 +904,10 @@ LocaleDataImpl::getDateAcceptancePatterns( const Locale& 
rLocale )
         sal_Int16 patternsCount = 0;
         sal_Unicode **patternsArray = func( patternsCount );
         Sequence< OUString > seq( patternsCount );
+        auto seqRange = asNonConstRange(seq);
         for (sal_Int16 i = 0; i < patternsCount; ++i)
         {
-            seq[i] = OUString( patternsArray[i] );
+            seqRange[i] = OUString( patternsArray[i] );
         }
         return seq;
     }
@@ -943,11 +947,12 @@ LocaleDataImpl::getCollatorImplementations( const Locale& 
rLocale )
         sal_Int16 collatorCount = 0;
         sal_Unicode **collatorArray = func(collatorCount);
         Sequence< Implementation > seq(collatorCount);
+        auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < collatorCount; i++) {
             Implementation impl(
                     OUString(collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_ALGO]),
                     collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_DEFAULT][0] != 0);
-            seq[i] = impl;
+            seqRange[i] = impl;
         }
         return seq;
     }
@@ -965,8 +970,9 @@ LocaleDataImpl::getCollationOptions( const Locale& rLocale )
         sal_Int16 optionsCount = 0;
         sal_Unicode **optionsArray = func(optionsCount);
         Sequence< OUString > seq(optionsCount);
+        auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < optionsCount; i++) {
-            seq[i] = OUString( optionsArray[i] );
+            seqRange[i] = OUString( optionsArray[i] );
         }
         return seq;
     }
@@ -984,8 +990,9 @@ LocaleDataImpl::getSearchOptions( const Locale& rLocale )
         sal_Int16 optionsCount = 0;
         sal_Unicode **optionsArray = func(optionsCount);
         Sequence< OUString > seq(optionsCount);
+        auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < optionsCount; i++) {
-            seq[i] = OUString( optionsArray[i] );
+            seqRange[i] = OUString( optionsArray[i] );
         }
         return seq;
     }
@@ -1012,8 +1019,9 @@ LocaleDataImpl::getIndexAlgorithm( const Locale& rLocale )
 
     if ( indexArray ) {
         Sequence< OUString > seq(indexCount);
+        auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < indexCount; i++) {
-            seq[i] = indexArray[i*5];
+            seqRange[i] = indexArray[i*5];
         }
         return seq;
     }
@@ -1096,8 +1104,9 @@ LocaleDataImpl::getUnicodeScripts( const Locale& rLocale )
         sal_Int16 scriptCount = 0;
         sal_Unicode **scriptArray = func(scriptCount);
         Sequence< UnicodeScript > seq(scriptCount);
+        auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < scriptCount; i++) {
-            seq[i] = UnicodeScript( OUString(scriptArray[i]).toInt32() );
+            seqRange[i] = UnicodeScript( OUString(scriptArray[i]).toInt32() );
         }
         return seq;
     }
@@ -1115,8 +1124,9 @@ LocaleDataImpl::getFollowPageWords( const Locale& rLocale 
)
         sal_Int16 wordCount = 0;
         sal_Unicode **wordArray = func(wordCount);
         Sequence< OUString > seq(wordCount);
+        auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < wordCount; i++) {
-            seq[i] = OUString(wordArray[i]);
+            seqRange[i] = OUString(wordArray[i]);
         }
         return seq;
     }
@@ -1135,9 +1145,10 @@ LocaleDataImpl::getTransliterations( const Locale& 
rLocale )
         sal_Unicode **transliterationsArray = func(transliterationsCount);
 
         Sequence< OUString > seq(transliterationsCount);
+        auto seqRange = asNonConstRange(seq);
         for(int i = 0; i < transliterationsCount; i++) {
             OUString  elem(transliterationsArray[i]);
-            seq[i] = elem;
+            seqRange[i] = elem;
         }
         return seq;
     }
@@ -1213,9 +1224,10 @@ LocaleDataImpl::getBreakIteratorRules( const Locale& 
rLocale  )
         sal_Int16 LCBreakIteratorRuleCount = 0;
         sal_Unicode **LCBreakIteratorRulesArray = 
func(LCBreakIteratorRuleCount);
         Sequence< OUString > seq(LCBreakIteratorRuleCount);
+        auto seqRange = asNonConstRange(seq);
         for(int i = 0; i < LCBreakIteratorRuleCount; i++) {
             OUString  elem(LCBreakIteratorRulesArray[i]);
-            seq[i] = elem;
+            seqRange[i] = elem;
         }
         return seq;
     }
@@ -1234,9 +1246,10 @@ LocaleDataImpl::getReservedWord( const Locale& rLocale  )
         sal_Int16 LCReservedWordsCount = 0;
         sal_Unicode **LCReservedWordsArray = func(LCReservedWordsCount);
         Sequence< OUString > seq(LCReservedWordsCount);
+        auto seqRange = asNonConstRange(seq);
         for(int i = 0; i < LCReservedWordsCount; i++) {
             OUString  elem(LCReservedWordsArray[i]);
-            seq[i] = elem;
+            seqRange[i] = elem;
         }
         return seq;
     }
@@ -1261,16 +1274,18 @@ LocaleDataImpl::getContinuousNumberingLevels( const 
lang::Locale& rLocale )
 
         // allocate memory for nAttributes attributes for each of the nStyles 
styles.
         Sequence< Sequence<beans::PropertyValue> > pv( nStyles );
-        for( auto& i : asNonConstRange(pv) ) {
+        auto pvRange = asNonConstRange(pv);
+        for( auto& i : pvRange ) {
             i = Sequence<beans::PropertyValue>( nAttributes );
         }
 
         sal_Unicode const *** pStyle = p0;
         for( int i=0;  i<nStyles;  i++ ) {
             sal_Unicode const ** pAttribute = pStyle[i];
+            auto pvElementRange = asNonConstRange(pvRange[i]);
             for( int j=0;  j<nAttributes;  j++ ) { // prefix, numberingtype, 
...
                 sal_Unicode const * pString = pAttribute[j];
-                beans::PropertyValue& rVal = pv[i][j];
+                beans::PropertyValue& rVal = pvElementRange[j];
                 OUString sVal;
                 if( pString ) {
                     if( 0 != j && 2 != j )
@@ -1367,7 +1382,7 @@ LocaleDataImpl::getOutlineNumberingLevels( const 
lang::Locale& rLocale )
         sal_Unicode const **** p0 = func( nStyles, nLevels, nAttributes );
 
         Sequence< Reference<container::XIndexAccess> > aRet( nStyles );
-
+        auto aRetRange = asNonConstRange(aRet);
         sal_Unicode const **** pStyle = p0;
         for( i=0;  i<nStyles;  i++ )
         {
@@ -1411,7 +1426,7 @@ LocaleDataImpl::getOutlineNumberingLevels( const 
lang::Locale& rLocale )
             level[j].nFirstLineOffset    = 0;
             level[j].sTransliteration.clear();
             level[j].nNatNum             = 0;
-            aRet[i] = new OutlineNumbering( std::move(level), nLevels );
+            aRetRange[i] = new OutlineNumbering( std::move(level), nLevels );
         }
         return aRet;
     }
@@ -1472,6 +1487,7 @@ Sequence< Locale > SAL_CALL
 LocaleDataImpl::getAllInstalledLocaleNames()
 {
     Sequence< lang::Locale > seq( nbOfLocales );
+    auto seqRange = asNonConstRange(seq);
     sal_Int16 nInstalled = 0;
 
     for(const auto & i : aLibTable) {
@@ -1483,7 +1499,7 @@ LocaleDataImpl::getAllInstalledLocaleNames()
         if (lcl_LookupTableStatic::get().getFunctionSymbolByName( name, 
"getLocaleItem", &pCachedItem )) {
             if( pCachedItem )
                 cachedItem = std::move( pCachedItem );
-            seq[nInstalled++] = LanguageTag::convertToLocale( name.replace( 
cUnder, cHyphen), false);
+            seqRange[nInstalled++] = LanguageTag::convertToLocale( 
name.replace( cUnder, cHyphen), false);
         }
     }
     if ( nInstalled < nbOfLocales )
diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx 
b/i18npool/source/nativenumber/nativenumbersupplier.cxx
index 13d6698ae203..c3c1cc6139ff 100644
--- a/i18npool/source/nativenumber/nativenumbersupplier.cxx
+++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx
@@ -87,6 +87,7 @@ static OUString AsciiToNativeChar( const OUString& inStr, 
sal_Int32 nCount,
     rtl_uString *newStr = rtl_uString_alloc(nCount);
     if (pOffset)
         pOffset->realloc(nCount);
+    auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
 
     for (sal_Int32 i = 0; i < nCount; i++)
     {
@@ -102,8 +103,8 @@ static OUString AsciiToNativeChar( const OUString& inStr, 
sal_Int32 nCount,
         }
         else
             newStr->buffer[i] = ch;
-        if (pOffset)
-            (*pOffset)[i] = i;
+        if (ppOffset)
+            ppOffset[i] = i;
     }
     return OUString(newStr, SAL_NO_ACQUIRE); // take ownership
 }
@@ -113,42 +114,43 @@ static bool AsciiToNative_numberMaker(const sal_Unicode 
*str, sal_Int32 begin, s
  const Number *number, const sal_Unicode* numberChar)
 {
     sal_Unicode multiChar = (multiChar_index == -1 ? 0 : 
number->multiplierChar[multiChar_index]);
+    auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
     if ( len <= number->multiplierExponent[number->exponentCount-1] ) {
         if (number->multiplierExponent[number->exponentCount-1] > 1) {
             bool bNotZero = false;
             for (const sal_Int32 end = begin+len; begin < end; begin++) {
                 if (bNotZero || str[begin] != NUMBER_ZERO) {
                     dst[count] = numberChar[str[begin] - NUMBER_ZERO];
-                    if (pOffset)
-                        (*pOffset)[count] = begin + startPos;
+                    if (ppOffset)
+                        ppOffset[count] = begin + startPos;
                     count++;
                     bNotZero = true;
                 }
             }
             if (bNotZero && multiChar > 0) {
                 dst[count] = multiChar;
-                if (pOffset)
-                    (*pOffset)[count] = begin + startPos;
+                if (ppOffset)
+                    ppOffset[count] = begin + startPos;
                 count++;
             }
             return bNotZero;
         } else if (str[begin] != NUMBER_ZERO) {
             if (!(number->numberFlag & (multiChar_index < 0 ? 0 : 
NUMBER_OMIT_ONE_CHECK(multiChar_index))) || str[begin] != NUMBER_ONE) {
                 dst[count] = numberChar[str[begin] - NUMBER_ZERO];
-                if (pOffset)
-                    (*pOffset)[count] = begin + startPos;
+                if (ppOffset)
+                    ppOffset[count] = begin + startPos;
                 count++;
             }
             if (multiChar > 0) {
                 dst[count] = multiChar;
-                if (pOffset)
-                    (*pOffset)[count] = begin + startPos;
+                if (ppOffset)
+                    ppOffset[count] = begin + startPos;
                 count++;
             }
         } else if (!(number->numberFlag & NUMBER_OMIT_ZERO) && count > 0 && 
dst[count-1] != numberChar[0]) {
             dst[count] = numberChar[0];
-            if (pOffset)
-                (*pOffset)[count] = begin + startPos;
+            if (ppOffset)
+                ppOffset[count] = begin + startPos;
             count++;
         }
         return str[begin] != NUMBER_ZERO;
@@ -170,8 +172,8 @@ static bool AsciiToNative_numberMaker(const sal_Unicode 
*str, sal_Int32 begin, s
                 count--;
             if (multiChar > 0) {
                 dst[count] = multiChar;
-                if (pOffset)
-                    (*pOffset)[count] = begin + startPos;
+                if (ppOffset)
+                    ppOffset[count] = begin + startPos;
                 count++;
             }
         }
@@ -200,6 +202,7 @@ static OUString AsciiToNative( const OUString& inStr, 
sal_Int32 nCount,
 
         if (pOffset)
             pOffset->realloc( nCount * 2 );
+        auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
         bool bDoDecimal = false;
 
         for (i = 0; i <= nCount; i++)
@@ -207,8 +210,8 @@ static OUString AsciiToNative( const OUString& inStr, 
sal_Int32 nCount,
             if (i < nCount && isNumber(str[i])) {
                 if (bDoDecimal) {
                     newStr[count] = numberChar[str[i] - NUMBER_ZERO];
-                    if (pOffset)
-                        (*pOffset)[count] = i;
+                    if (ppOffset)
+                        ppOffset[count] = i;
                     count++;
                 }
                 else
@@ -229,15 +232,15 @@ static OUString AsciiToNative( const OUString& inStr, 
sal_Int32 nCount,
                             count--;
                         if (bNotZero && _count == count && end != len) {
                             newStr[count] = number->multiplierChar[0];
-                            if (pOffset)
-                                (*pOffset)[count] = i - len;
+                            if (ppOffset)
+                                ppOffset[count] = i - len;
                             count++;
                         }
                     }
                     if (! bNotZero && ! (number->numberFlag & 
NUMBER_OMIT_ONLY_ZERO)) {
                         newStr[count] = numberChar[0];
-                        if (pOffset)
-                            (*pOffset)[count] = i - len;
+                        if (ppOffset)
+                            ppOffset[count] = i - len;
                         count++;
                     }
                     len = 0;
@@ -252,8 +255,8 @@ static OUString AsciiToNative( const OUString& inStr, 
sal_Int32 nCount,
                         newStr[count] = (SeparatorChar[number->number] ? 
SeparatorChar[number->number] : str[i]);
                     else
                         newStr[count] = str[i];
-                    if (pOffset)
-                        (*pOffset)[count] = i;
+                    if (ppOffset)
+                        ppOffset[count] = i;
                     count++;
                 }
             }
@@ -272,6 +275,7 @@ void NativeToAscii_numberMaker(sal_Int16 max, sal_Int16 
prev, const sal_Unicode
         sal_Int32& i, sal_Int32 nCount, sal_Unicode *dst, sal_Int32& count, 
Sequence< sal_Int32 >* pOffset,
         OUString& numberChar, OUString& multiplierChar)
 {
+    auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
     sal_Int16 curr = 0, num = 0, end = 0, shift = 0;
     while (++i < nCount) {
         if ((curr = sal::static_int_cast<sal_Int16>( 
numberChar.indexOf(str[i]) )) >= 0) {
@@ -290,16 +294,16 @@ void NativeToAscii_numberMaker(sal_Int16 max, sal_Int16 
prev, const sal_Unicode
                 end = curr;
             while (end++ < prev) {
                 dst[count] = NUMBER_ZERO + (end == prev ? num : 0);
-                if (pOffset)
-                    (*pOffset)[count] = i;
+                if (ppOffset)
+                    ppOffset[count] = i;
                 count++;
             }
             if (shift) {
                 count -= max;
                 for (const sal_Int32 countEnd = count+shift; count < countEnd; 
count++) {
                     dst[count] = dst[count + curr];
-                    if (pOffset)
-                        (*pOffset)[count] = (*pOffset)[count + curr];
+                    if (ppOffset)
+                        ppOffset[count] = ppOffset[count + curr];
                 }
                 max = curr;
             }
@@ -311,8 +315,8 @@ void NativeToAscii_numberMaker(sal_Int16 max, sal_Int16 
prev, const sal_Unicode
     }
     while (end++ < prev) {
         dst[count] = NUMBER_ZERO + (end == prev ? num : 0);
-        if (pOffset)
-            (*pOffset)[count] = i - 1;
+        if (ppOffset)
+            ppOffset[count] = i - 1;
         count++;
     }
 }
@@ -333,6 +337,7 @@ OUString NativeToAscii(const OUString& inStr,
         std::unique_ptr<sal_Unicode[]> newStr(new sal_Unicode[nCount * 
MultiplierExponent_7_CJK[0] + 2]);
         if (pOffset)
             pOffset->realloc( nCount * MultiplierExponent_7_CJK[0] + 1 );
+        auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
         sal_Int32 count = 0, index;
         sal_Int32 i;
 
@@ -348,8 +353,8 @@ OUString NativeToAscii(const OUString& inStr,
             if ((index = multiplierChar.indexOf(str[i])) >= 0) {
                 if (count == 0 || !isNumber(newStr[count-1])) { // add 1 in 
front of multiplier
                     newStr[count] = NUMBER_ONE;
-                    if (pOffset)
-                        (*pOffset)[count] = i;
+                    if (ppOffset)
+                        ppOffset[count] = i;
                     count++;
                 }
                 index = MultiplierExponent_7_CJK[index % ExponentCount_7_CJK];
@@ -378,8 +383,8 @@ OUString NativeToAscii(const OUString& inStr,
                     newStr[count] = MinusChar[NumberChar_HalfWidth];
                 else
                     newStr[count] = str[i];
-                if (pOffset)
-                    (*pOffset)[count] = i;
+                if (ppOffset)
+                    ppOffset[count] = i;
                 count++;
             }
         }
diff --git a/i18npool/source/search/textsearch.cxx 
b/i18npool/source/search/textsearch.cxx
index dcb31762e6c2..c5e48a12b4c0 100644
--- a/i18npool/source/search/textsearch.cxx
+++ b/i18npool/source/search/textsearch.cxx
@@ -372,6 +372,8 @@ SearchResult TextSearch::searchForward( const OUString& 
searchStr, sal_Int32 sta
         const sal_Int32 nOffsets = offset.getLength();
         if (nOffsets)
         {
+            auto sres_startOffsetRange = asNonConstRange(sres.startOffset);
+            auto sres_endOffsetRange = asNonConstRange(sres.endOffset);
             // For regex nGroups is the number of groups+1 with group 0 being
             // the entire match.
             const sal_Int32 nGroups = sres.startOffset.getLength();
@@ -381,7 +383,7 @@ SearchResult TextSearch::searchForward( const OUString& 
searchStr, sal_Int32 sta
                 // Result offsets are negative (-1) if a group expression was
                 // not matched.
                 if (nStart >= 0)
-                    sres.startOffset[k] = (nStart < nOffsets ? offset[nStart] 
: (offset[nOffsets - 1] + 1));
+                    sres_startOffsetRange[k] = (nStart < nOffsets ? 
offset[nStart] : (offset[nOffsets - 1] + 1));
                 // JP 20.6.2001: end is ever exclusive and then don't return
                 //               the position of the next character - return 
the
                 //               next position behind the last found character!
@@ -390,9 +392,9 @@ SearchResult TextSearch::searchForward( const OUString& 
searchStr, sal_Int32 sta
                 if (nStop >= 0)
                 {
                     if (nStop > 0)
-                        sres.endOffset[k] = offset[(nStop <= nOffsets ? nStop 
: nOffsets) - 1] + 1;
+                        sres_endOffsetRange[k] = offset[(nStop <= nOffsets ? 
nStop : nOffsets) - 1] + 1;
                     else
-                        sres.endOffset[k] = offset[0];
+                        sres_endOffsetRange[k] = offset[0];
                 }
             }
         }
@@ -424,13 +426,15 @@ SearchResult TextSearch::searchForward( const OUString& 
searchStr, sal_Int32 sta
 
         bUsePrimarySrchStr = false;
         sres2 = (this->*fnForward)( in_str, startPos, endPos );
+        auto sres2_startOffsetRange = asNonConstRange(sres2.startOffset);
+        auto sres2_endOffsetRange = asNonConstRange(sres2.endOffset);
 
         for ( int k = 0; k < sres2.startOffset.getLength(); k++ )
         {
             if (sres2.startOffset[k])
-                sres2.startOffset[k] = offset[sres2.startOffset[k]-1] + 1;
+                sres2_startOffsetRange[k] = offset[sres2.startOffset[k]-1] + 1;
             if (sres2.endOffset[k])
-                sres2.endOffset[k] = offset[sres2.endOffset[k]-1] + 1;
+                sres2_endOffsetRange[k] = offset[sres2.endOffset[k]-1] + 1;
         }
 
         // pick first and long one
@@ -490,6 +494,8 @@ SearchResult TextSearch::searchBackward( const OUString& 
searchStr, sal_Int32 st
         const sal_Int32 nOffsets = offset.getLength();
         if (nOffsets)
         {
+            auto sres_startOffsetRange = asNonConstRange(sres.startOffset);
+            auto sres_endOffsetRange = asNonConstRange(sres.endOffset);
             // For regex nGroups is the number of groups+1 with group 0 being
             // the entire match.
             const sal_Int32 nGroups = sres.startOffset.getLength();
@@ -501,9 +507,9 @@ SearchResult TextSearch::searchBackward( const OUString& 
searchStr, sal_Int32 st
                 if (nStart >= 0)
                 {
                     if (nStart > 0)
-                        sres.startOffset[k] = offset[(nStart <= nOffsets ? 
nStart : nOffsets) - 1] + 1;
+                        sres_startOffsetRange[k] = offset[(nStart <= nOffsets 
? nStart : nOffsets) - 1] + 1;
                     else
-                        sres.startOffset[k] = offset[0];
+                        sres_startOffsetRange[k] = offset[0];
                 }
                 // JP 20.6.2001: end is ever exclusive and then don't return
                 //               the position of the next character - return 
the
@@ -511,7 +517,7 @@ SearchResult TextSearch::searchBackward( const OUString& 
searchStr, sal_Int32 st
                 //               "a b c" find "b" must return 2,3 and not 
2,4!!!
                 const sal_Int32 nStop = sres.endOffset[k];
                 if (nStop >= 0)
-                    sres.endOffset[k] = (nStop < nOffsets ? offset[nStop] : 
(offset[nOffsets - 1] + 1));
+                    sres_endOffsetRange[k] = (nStop < nOffsets ? offset[nStop] 
: (offset[nOffsets - 1] + 1));
             }
         }
     }
@@ -542,13 +548,15 @@ SearchResult TextSearch::searchBackward( const OUString& 
searchStr, sal_Int32 st
 
         bUsePrimarySrchStr = false;
         sres2 = (this->*fnBackward)( in_str, startPos, endPos );
+        auto sres2_startOffsetRange = asNonConstRange(sres2.startOffset);
+        auto sres2_endOffsetRange = asNonConstRange(sres2.endOffset);
 
         for( int k = 0; k < sres2.startOffset.getLength(); k++ )
         {
             if (sres2.startOffset[k])
-                sres2.startOffset[k] = offset[sres2.startOffset[k]-1]+1;
+                sres2_startOffsetRange[k] = offset[sres2.startOffset[k]-1]+1;
             if (sres2.endOffset[k])
-                sres2.endOffset[k] = offset[sres2.endOffset[k]-1]+1;
+                sres2_endOffsetRange[k] = offset[sres2.endOffset[k]-1]+1;
         }
 
         // pick last and long one
@@ -760,10 +768,8 @@ SearchResult TextSearch::NSrchFrwrd( const OUString& 
searchStr, sal_Int32 startP
                 }
 
                 aRet.subRegExpressions = 1;
-                aRet.startOffset.realloc( 1 );
-                aRet.startOffset[ 0 ] = nCmpIdx;
-                aRet.endOffset.realloc( 1 );
-                aRet.endOffset[ 0 ] = nCmpIdx + sSearchKey.getLength();
+                aRet.startOffset = { nCmpIdx };
+                aRet.endOffset = { nCmpIdx + sSearchKey.getLength() };
 
                 return aRet;
             }
@@ -829,20 +835,16 @@ SearchResult TextSearch::NSrchBkwrd( const OUString& 
searchStr, sal_Int32 startP
                             ( bDelimBefore && bDelimBehind ))   // 4
                     {
                         aRet.subRegExpressions = 1;
-                        aRet.startOffset.realloc( 1 );
-                        aRet.startOffset[ 0 ] = nCmpIdx;
-                        aRet.endOffset.realloc( 1 );
-                        aRet.endOffset[ 0 ] = nCmpIdx - sSearchKey.getLength();
+                        aRet.startOffset = { nCmpIdx };
+                        aRet.endOffset = { nCmpIdx - sSearchKey.getLength() };
                         return aRet;
                     }
                 }
                 else
                 {
                     aRet.subRegExpressions = 1;
-                    aRet.startOffset.realloc( 1 );
-                    aRet.startOffset[ 0 ] = nCmpIdx;
-                    aRet.endOffset.realloc( 1 );
-                    aRet.endOffset[ 0 ] = nCmpIdx - sSearchKey.getLength();
+                    aRet.startOffset = { nCmpIdx };
+                    aRet.endOffset = { nCmpIdx - sSearchKey.getLength() };
                     return aRet;
                 }
             }
@@ -985,12 +987,14 @@ SearchResult TextSearch::RESrchFrwrd( const OUString& 
searchStr,
     const int nGroupCount = pRegexMatcher->groupCount();
     aRet.subRegExpressions = nGroupCount + 1;
     aRet.startOffset.realloc( aRet.subRegExpressions);
+    auto pstartOffset = aRet.startOffset.getArray();
     aRet.endOffset.realloc( aRet.subRegExpressions);
-    aRet.startOffset[0] = pRegexMatcher->start( nIcuErr);
-    aRet.endOffset[0]   = pRegexMatcher->end( nIcuErr);
+    auto pendOffset = aRet.endOffset.getArray();
+    pstartOffset[0] = pRegexMatcher->start( nIcuErr);
+    pendOffset[0]   = pRegexMatcher->end( nIcuErr);
     for( int i = 1; i <= nGroupCount; ++i) {
-        aRet.startOffset[i] = pRegexMatcher->start( i, nIcuErr);
-        aRet.endOffset[i]   = pRegexMatcher->end( i, nIcuErr);
+        pstartOffset[i] = pRegexMatcher->start( i, nIcuErr);
+        pendOffset[i]   = pRegexMatcher->end( i, nIcuErr);
     }
 
     return aRet;
@@ -1055,13 +1059,15 @@ SearchResult TextSearch::RESrchBkwrd( const OUString& 
searchStr,
     const int nGroupCount = pRegexMatcher->groupCount();
     aRet.subRegExpressions = nGroupCount + 1;
     aRet.startOffset.realloc( aRet.subRegExpressions);
+    auto pstartOffset = aRet.startOffset.getArray();
     aRet.endOffset.realloc( aRet.subRegExpressions);
+    auto pendOffset = aRet.endOffset.getArray();
     // NOTE: existing users of backward search seem to expect startOfs/endOfs 
being inverted!
-    aRet.startOffset[0] = pRegexMatcher->end( nIcuErr);
-    aRet.endOffset[0]   = pRegexMatcher->start( nIcuErr);
+    pstartOffset[0] = pRegexMatcher->end( nIcuErr);
+    pendOffset[0]   = pRegexMatcher->start( nIcuErr);
     for( int i = 1; i <= nGroupCount; ++i) {
-        aRet.startOffset[i] = pRegexMatcher->end( i, nIcuErr);
-        aRet.endOffset[i]   = pRegexMatcher->start( i, nIcuErr);
+        pstartOffset[i] = pRegexMatcher->end( i, nIcuErr);
+        pendOffset[i]   = pRegexMatcher->start( i, nIcuErr);
     }
 
     return aRet;
@@ -1095,10 +1101,8 @@ SearchResult TextSearch::ApproxSrchFrwrd( const 
OUString& searchStr,
                 pWLD->WLD( searchStr.getStr() + nStt, nEnd - nStt ) <= nLimit )
         {
             aRet.subRegExpressions = 1;
-            aRet.startOffset.realloc( 1 );
-            aRet.startOffset[ 0 ] = nStt;
-            aRet.endOffset.realloc( 1 );
-            aRet.endOffset[ 0 ] = nEnd;
+            aRet.startOffset = { nStt };
+            aRet.endOffset = { nEnd };
             break;
         }
 
@@ -1139,10 +1143,8 @@ SearchResult TextSearch::ApproxSrchBkwrd( const 
OUString& searchStr,
                 pWLD->WLD( searchStr.getStr() + nStt, nEnd - nStt ) <= nLimit )
         {
             aRet.subRegExpressions = 1;
-            aRet.startOffset.realloc( 1 );
-            aRet.startOffset[ 0 ] = nEnd;
-            aRet.endOffset.realloc( 1 );
-            aRet.endOffset[ 0 ] = nStt;
+            aRet.startOffset = { nEnd };
+            aRet.endOffset = { nStt };
             break;
         }
         if( !nStt )
@@ -1159,10 +1161,8 @@ namespace {
 void setWildcardMatch( css::util::SearchResult& rRes, sal_Int32 nStartOffset, 
sal_Int32 nEndOffset )
 {
     rRes.subRegExpressions = 1;
-    rRes.startOffset.realloc(1);
-    rRes.endOffset.realloc(1);
-    rRes.startOffset[0] = nStartOffset;
-    rRes.endOffset[0] = nEndOffset;
+    rRes.startOffset = { nStartOffset };
+    rRes.endOffset = { nEndOffset };
 }
 }
 
diff --git a/i18npool/source/textconversion/textconversion_ko.cxx 
b/i18npool/source/textconversion/textconversion_ko.cxx
index e03286b772d7..fac1e7bc194b 100644
--- a/i18npool/source/textconversion/textconversion_ko.cxx
+++ b/i18npool/source/textconversion/textconversion_ko.cxx
@@ -150,8 +150,9 @@ TextConversion_ko::getCharConversions(const OUString& 
aText, sal_Int32 nStartPos
                 const sal_Unicode *ptr = getHangul2HanjaData() + 
Hangul_ko[current].address;
                 sal_Int16 count = Hangul_ko[current].count;
                 output.realloc(count);
+                auto poutput = output.getArray();
                 for (sal_Int16 i = 0; i < count; i++)
-                    output[i] = OUString(ptr + i, 1);
+                    poutput[i] = OUString(ptr + i, 1);
                 break;
             }
         }
@@ -178,8 +179,7 @@ TextConversion_ko::getCharConversions(const OUString& 
aText, sal_Int32 nStartPos
         }
         if (count > 0)
         {
-            output.realloc(1);
-            output[0] = OUString(newStr.get(), count);
+            output = { OUString(newStr.get(), count) };
         }
     }
     return output;
diff --git a/i18npool/source/textconversion/textconversion_zh.cxx 
b/i18npool/source/textconversion/textconversion_zh.cxx
index 23689c0b568e..13059dba5d91 100644
--- a/i18npool/source/textconversion/textconversion_zh.cxx
+++ b/i18npool/source/textconversion/textconversion_zh.cxx
@@ -166,6 +166,7 @@ TextConversion_zh::getWordConversion(const OUString& aText, 
sal_Int32 nStartPos,
 
     std::unique_ptr<sal_Unicode[]> newStr(new sal_Unicode[nLength * 2 + 1]);
     sal_Int32 currPos = 0, count = 0;
+    auto offsetRange = asNonConstRange(offset);
     while (currPos < nLength) {
         sal_Int32 len = nLength - currPos;
         bool found = false;
@@ -198,7 +199,7 @@ TextConversion_zh::getWordConversion(const OUString& aText, 
sal_Int32 nStartPos,
                         if (word.getLength() != conversions[0].getLength())
                             one2one=false;
                         while (current < conversions[0].getLength()) {
-                            offset[count] = nStartPos + currPos + (current *
+                            offsetRange[count] = nStartPos + currPos + 
(current *
                                     word.getLength() / 
conversions[0].getLength());
                             newStr[count++] = conversions[0][current++];
                         }
@@ -235,7 +236,7 @@ TextConversion_zh::getWordConversion(const OUString& aText, 
sal_Int32 nStartPos,
                                 one2one=false;
                             sal_Int32 
convertedLength=OUString(&wordData[current]).getLength();
                             while (wordData[current]) {
-                                offset[count]=nStartPos + currPos + 
((current-start) *
+                                offsetRange[count]=nStartPos + currPos + 
((current-start) *
                                     word.getLength() / convertedLength);
                                 newStr[count++] = wordData[current++];
                             }
@@ -252,7 +253,7 @@ TextConversion_zh::getWordConversion(const OUString& aText, 
sal_Int32 nStartPos,
         }
         if (!found) {
             if (offset.hasElements())
-                offset[count]=nStartPos+currPos;
+                offsetRange[count]=nStartPos+currPos;
             newStr[count++] =
                 getOneCharConversion(aText[nStartPos+currPos], charData, 
charIndex);
             currPos++;
@@ -270,8 +271,8 @@ TextConversion_zh::getConversions( const OUString& aText, 
sal_Int32 nStartPos, s
 {
     TextConversionResult result;
 
-    result.Candidates.realloc(1);
-    result.Candidates[0] = getConversion( aText, nStartPos, nLength, rLocale, 
nConversionType, nConversionOptions);
+    result.Candidates =
+        { getConversion( aText, nStartPos, nLength, rLocale, nConversionType, 
nConversionOptions) };
     result.Boundary.startPos = nStartPos;
     result.Boundary.endPos = nStartPos + nLength;
 
diff --git a/i18npool/source/transliteration/textToPronounce_zh.cxx 
b/i18npool/source/transliteration/textToPronounce_zh.cxx
index 29e274c452e8..ad33bdf31dca 100644
--- a/i18npool/source/transliteration/textToPronounce_zh.cxx
+++ b/i18npool/source/transliteration/textToPronounce_zh.cxx
@@ -62,14 +62,15 @@ TextToPronounce_zh::foldingImpl(const OUString & inStr, 
sal_Int32 startPos,
     if (startPos + nCount > inStr.getLength())
         nCount = inStr.getLength() - startPos;
 
-    if (pOffset)
-        (*pOffset)[0] = 0;
+    auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
+    if (ppOffset)
+        ppOffset[0] = 0;
     for (sal_Int32 i = 0; i < nCount; i++) {
         OUString pron(getPronounce(chArr[i]));
         sb.append(pron);
 
-        if (pOffset)
-            (*pOffset)[i + 1] = (*pOffset)[i] + pron.getLength();
+        if (ppOffset)
+            ppOffset[i + 1] = (*pOffset)[i] + pron.getLength();
     }
     return sb.makeStringAndClear();
 }
diff --git a/i18npool/source/transliteration/transliterationImpl.cxx 
b/i18npool/source/transliteration/transliterationImpl.cxx
index 55236ec3dfa9..54305126c640 100644
--- a/i18npool/source/transliteration/transliterationImpl.cxx
+++ b/i18npool/source/transliteration/transliterationImpl.cxx
@@ -329,7 +329,7 @@ TransliterationImpl::transliterate( const OUString& inStr, 
sal_Int32 startPos, s
             assert(from.getLength() == nCount);
             from.swap(to);
             for (sal_Int32& ix : asNonConstRange(to))
-                ix = std::as_const(from)[ix];
+                ix = from[ix];
         }
         offset = to;
         return tmpStr;
@@ -369,20 +369,20 @@ TransliterationImpl::folding( const OUString& inStr, 
sal_Int32 startPos, sal_Int
         auto [begin, end] = asNonConstRange(offset);
         std::iota(begin, end, startPos);
 
-        sal_Int16 from = 0, to = 1;
-        Sequence<sal_Int32> off[2];
+        Sequence<sal_Int32> from;
+        Sequence<sal_Int32> to = offset;
 
-        off[to] = offset;
         for (sal_Int32 i = 0; i < numCascade; i++) {
-            tmpStr = bodyCascade[i]->folding(tmpStr, 0, nCount, off[from]);
+            tmpStr = bodyCascade[i]->folding(tmpStr, 0, nCount, from);
 
             nCount = tmpStr.getLength();
 
-            std::swap(from, to);
-            for (sal_Int32 j = 0; j < nCount; j++)
-                off[to][j] = off[from][off[to][j]];
+            assert(from.getLength() == nCount);
+            from.swap(to);
+            for (sal_Int32& ix : asNonConstRange(to))
+                ix = from[ix];
         }
-        offset = off[to];
+        offset = to;
         return tmpStr;
     }
 }
diff --git a/i18npool/source/transliteration/transliteration_Numeric.cxx 
b/i18npool/source/transliteration/transliteration_Numeric.cxx
index 22b3769068f5..57c5b7e9942b 100644
--- a/i18npool/source/transliteration/transliteration_Numeric.cxx
+++ b/i18npool/source/transliteration/transliteration_Numeric.cxx
@@ -71,6 +71,7 @@ transliteration_Numeric::transliterateBullet( const OUString& 
inStr, sal_Int32 s
 
     if (pOffset)
         pOffset->realloc(nCount);
+    auto ppOffset = pOffset ? pOffset->getArray() : nullptr;
 
     for (sal_Int32 i = startPos; i < endPos; i++) {
         if (isNumber(inStr[i]))
@@ -83,22 +84,22 @@ transliteration_Numeric::transliterateBullet( const 
OUString& inStr, sal_Int32 s
             }
         } else {
             if (number == 0) {
-                if (pOffset)
-                    (*pOffset)[j] = startPos;
+                if (ppOffset)
+                    ppOffset[j] = startPos;
                 out[j++] = NUMBER_ZERO;
             } else if (number > tableSize && !recycleSymbol) {
                 for (sal_Int32 k = startPos; k < i; k++) {
-                    if (pOffset)
-                        (*pOffset)[j] = k;
+                    if (ppOffset)
+                        ppOffset[j] = k;
                     out[j++] = inStr[k];
                 }
             } else if (number > 0) {
-                if (pOffset)
-                    (*pOffset)[j] = startPos;
+                if (ppOffset)
+                    ppOffset[j] = startPos;
                 out[j++] = table[--number % tableSize];
             } else if (i < endPos) {
-                if (pOffset)
-                    (*pOffset)[j] = i;
+                if (ppOffset)
+                    ppOffset[j] = i;
                 out[j++] = inStr[i];
             }
             number = -1;

Reply via email to