diff options
author | Zufu Liu <unknown> | 2023-03-11 13:00:19 +1100 |
---|---|---|
committer | Zufu Liu <unknown> | 2023-03-11 13:00:19 +1100 |
commit | 0677b27b9e9ff04257629c3ce9cf2309cbaaa0eb (patch) | |
tree | 550a9f08dd65f19870e7bb4e43e6e4c23140ca96 | |
parent | c5bb65863951eae9e98dd5aa19db683fd23c5242 (diff) | |
download | scintilla-mirror-0677b27b9e9ff04257629c3ce9cf2309cbaaa0eb.tar.gz |
Feature [feature-requests:#1482] Merge case converters into an array.
Small reduction in executable size.
-rw-r--r-- | src/CaseConvert.cxx | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/src/CaseConvert.cxx b/src/CaseConvert.cxx index 601432f14..f5513ab90 100644 --- a/src/CaseConvert.cxx +++ b/src/CaseConvert.cxx @@ -605,7 +605,6 @@ class CaseConverter : public ICaseConverter { return character < other.character; } }; - CaseConversion conversion; typedef std::vector<CharacterConversion> CharacterToConversion; CharacterToConversion characterToConversion; // The parallel arrays @@ -613,8 +612,7 @@ class CaseConverter : public ICaseConverter { std::vector<ConversionString> conversions; public: - explicit CaseConverter(CaseConversion conversion_) : conversion(conversion_) { - }; + CaseConverter() noexcept = default; // Deleted so CaseConverter objects can not be copied. CaseConverter(const CaseConverter &) = delete; CaseConverter(CaseConverter &&) = delete; @@ -690,15 +688,13 @@ public: // Empty the original calculated data completely CharacterToConversion().swap(characterToConversion); } - void AddSymmetric(int lower, int upper); - void SetupConversions(); + void AddSymmetric(CaseConversion conversion, int lower, int upper); + void SetupConversions(CaseConversion conversion); }; -CaseConverter caseConvFold(CaseConversion::fold); -CaseConverter caseConvUp(CaseConversion::upper); -CaseConverter caseConvLow(CaseConversion::lower); +CaseConverter caseConvList[3]; -void CaseConverter::AddSymmetric(int lower, int upper) { +void CaseConverter::AddSymmetric(CaseConversion conversion, int lower, int upper) { const int character = (conversion == CaseConversion::upper) ? lower : upper; const int source = (conversion == CaseConversion::upper) ? upper : lower; char converted[maxConversionLength+1]{}; @@ -720,7 +716,7 @@ std::string_view NextField(std::string_view &view) { return field; } -void CaseConverter::SetupConversions() { +void CaseConverter::SetupConversions(CaseConversion conversion) { // First initialize for the symmetric ranges for (size_t i=0; i<std::size(symmetricCaseConversionRanges);) { const int lower = symmetricCaseConversionRanges[i++]; @@ -728,14 +724,14 @@ void CaseConverter::SetupConversions() { const int length = symmetricCaseConversionRanges[i++]; const int pitch = symmetricCaseConversionRanges[i++]; for (int j=0; j<length*pitch; j+=pitch) { - AddSymmetric(lower+j, upper+j); + AddSymmetric(conversion, lower+j, upper+j); } } // Add the symmetric singletons for (size_t i=0; i<std::size(symmetricCaseConversions);) { const int lower = symmetricCaseConversions[i++]; const int upper = symmetricCaseConversions[i++]; - AddSymmetric(lower, upper); + AddSymmetric(conversion, lower, upper); } // Add the complex cases std::string_view sComplex = complexCaseConversions; @@ -768,21 +764,11 @@ void CaseConverter::SetupConversions() { } CaseConverter *ConverterForConversion(CaseConversion conversion) { - CaseConverter *pCaseConv = &caseConvFold; - switch (conversion) { - case CaseConversion::fold: - pCaseConv = &caseConvFold; - break; - case CaseConversion::upper: - pCaseConv = &caseConvUp; - break; - case CaseConversion::lower: - default: - pCaseConv = &caseConvLow; - break; - } + const unsigned index = static_cast<unsigned>(conversion); + assert(index < std::size(caseConvList)); + CaseConverter *pCaseConv = &caseConvList[index]; if (!pCaseConv->Initialised()) { - pCaseConv->SetupConversions(); + pCaseConv->SetupConversions(conversion); } return pCaseConv; } |