concordia-library/utf8case/range_based_case_converter.hpp
Rafał Jaworski 6ddba32f48 utf8
Former-commit-id: fa7407621e839f87613476596c6589aeceb9d796
2014-04-24 11:51:04 +02:00

28 lines
883 B
C++

#ifndef RANGE_BASED_CASE_CONVERTED_HDR
#define RANGE_BASED_CASE_CONVERTED_HDR
#include "case_tables.hpp"
class RangeBasedCaseConverter {
public:
RangeBasedCaseConverter(size_t tableSize, const CaseConversionRecord* conversionTable)
:tableSize_(tableSize), conversionTable_(conversionTable) {
}
uint32_t convert(uint32_t code_point) const;
private:
const CaseConversionRecord* findRecord_(uint32_t code_point) const;
uint32_t applyRecord_(const CaseConversionRecord* conversionRecord, uint32_t code_point) const;
bool shouldBeSkipped_(
const CaseConversionRecord* conversionRecord, uint32_t code_point) const;
bool isSkipRecord_(const CaseConversionRecord* conversionRecord) const;
uint32_t applyDelta_(int32_t delta, uint32_t code_point) const;
size_t tableSize_;
const CaseConversionRecord* conversionTable_;
};
#endif