aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorZufu Liu <unknown>2023-03-11 13:00:19 +1100
committerZufu Liu <unknown>2023-03-11 13:00:19 +1100
commit0677b27b9e9ff04257629c3ce9cf2309cbaaa0eb (patch)
tree550a9f08dd65f19870e7bb4e43e6e4c23140ca96
parentc5bb65863951eae9e98dd5aa19db683fd23c5242 (diff)
downloadscintilla-mirror-0677b27b9e9ff04257629c3ce9cf2309cbaaa0eb.tar.gz
Feature [feature-requests:#1482] Merge case converters into an array.
Small reduction in executable size.
-rw-r--r--src/CaseConvert.cxx38
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;
}