From 6d1bf18357b56cbec7d289c9c9434a7a8888b386 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 29 Mar 2019 09:05:14 +1100 Subject: Feature [feature-requests:#1259]. Add SCI_SETCHARACTERCATEGORYOPTIMIZATION API to optimize speed of character category features. --- lexlib/CharacterCategory.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'lexlib/CharacterCategory.h') diff --git a/lexlib/CharacterCategory.h b/lexlib/CharacterCategory.h index 767d79670..d1ac39152 100644 --- a/lexlib/CharacterCategory.h +++ b/lexlib/CharacterCategory.h @@ -28,6 +28,23 @@ bool IsIdContinue(int character); bool IsXidStart(int character); bool IsXidContinue(int character); +class CharacterCategoryMap { +private: + std::vector dense; +public: + CharacterCategoryMap() noexcept; + CharacterCategory CategoryFor(int character) const { + if (static_cast(character) < dense.size()) { + return static_cast(dense[character]); + } else { + // binary search through ranges + return CategoriseCharacter(character); + } + } + int Size() const noexcept; + void Optimize(int countCharacters); +}; + } #endif -- cgit v1.2.3