mirror of
https://github.com/dlang/phobos.git
synced 2025-05-04 09:00:22 +03:00
deduplicate CodepointTries and leave the data in libphobos2.a
- Store the static immutable CodepointTries in separate functions.
This commit is contained in:
parent
f9e7a93d93
commit
26edfc624f
2 changed files with 45 additions and 27 deletions
File diff suppressed because one or more lines are too long
69
std/uni.d
69
std/uni.d
|
@ -4993,8 +4993,8 @@ private static bool isRegionalIndicator(dchar ch)
|
||||||
|
|
||||||
template genericDecodeGrapheme(bool getValue)
|
template genericDecodeGrapheme(bool getValue)
|
||||||
{
|
{
|
||||||
static immutable graphemeExtend = asTrie(graphemeExtendTrieEntries);
|
alias graphemeExtend = graphemeExtendTrie;
|
||||||
static immutable spacingMark = asTrie(mcTrieEntries);
|
alias spacingMark = mcTrie;
|
||||||
static if(getValue)
|
static if(getValue)
|
||||||
alias Grapheme Value;
|
alias Grapheme Value;
|
||||||
else
|
else
|
||||||
|
@ -5551,7 +5551,6 @@ unittest
|
||||||
+/
|
+/
|
||||||
int sicmp(C1, C2)(const(C1)[] str1, const(C2)[] str2)
|
int sicmp(C1, C2)(const(C1)[] str1, const(C2)[] str2)
|
||||||
{
|
{
|
||||||
static immutable simpleCaseTrie = asTrie(simpleCaseTrieEntries);
|
|
||||||
alias sTable = simpleCaseTable;
|
alias sTable = simpleCaseTable;
|
||||||
size_t ridx=0;
|
size_t ridx=0;
|
||||||
foreach(dchar lhs; str1)
|
foreach(dchar lhs; str1)
|
||||||
|
@ -5592,7 +5591,6 @@ int sicmp(C1, C2)(const(C1)[] str1, const(C2)[] str2)
|
||||||
|
|
||||||
private int fullCasedCmp(Range)(dchar lhs, dchar rhs, ref Range rtail)
|
private int fullCasedCmp(Range)(dchar lhs, dchar rhs, ref Range rtail)
|
||||||
{
|
{
|
||||||
static immutable fullCaseTrie = asTrie(fullCaseTrieEntries);
|
|
||||||
alias fTable = fullCaseTable;
|
alias fTable = fullCaseTable;
|
||||||
size_t idx = fullCaseTrie[lhs];
|
size_t idx = fullCaseTrie[lhs];
|
||||||
// fullCaseTrie is packed index table
|
// fullCaseTrie is packed index table
|
||||||
|
@ -5728,7 +5726,6 @@ unittest
|
||||||
+/
|
+/
|
||||||
ubyte combiningClass(dchar ch)
|
ubyte combiningClass(dchar ch)
|
||||||
{
|
{
|
||||||
static immutable combiningClassTrie = asTrie(combiningClassTrieEntries);
|
|
||||||
return combiningClassTrie[ch];
|
return combiningClassTrie[ch];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5785,7 +5782,6 @@ enum {
|
||||||
+/
|
+/
|
||||||
public dchar compose(dchar first, dchar second)
|
public dchar compose(dchar first, dchar second)
|
||||||
{
|
{
|
||||||
static immutable compositionJumpTrie = asTrie(compositionJumpTrieEntries);
|
|
||||||
size_t packed = compositionJumpTrie[first];
|
size_t packed = compositionJumpTrie[first];
|
||||||
if(packed == ushort.max)
|
if(packed == ushort.max)
|
||||||
return dchar.init;
|
return dchar.init;
|
||||||
|
@ -5830,12 +5826,12 @@ public Grapheme decompose(UnicodeDecomposition decompType=Canonical)(dchar ch)
|
||||||
static if(decompType == Canonical)
|
static if(decompType == Canonical)
|
||||||
{
|
{
|
||||||
alias table = decompCanonTable;
|
alias table = decompCanonTable;
|
||||||
static immutable mapping = asTrie(canonMappingTrieEntries);
|
alias mapping = canonMappingTrie;
|
||||||
}
|
}
|
||||||
else static if(decompType == Compatibility)
|
else static if(decompType == Compatibility)
|
||||||
{
|
{
|
||||||
alias table = decompCompatTable;
|
alias table = decompCompatTable;
|
||||||
static immutable mapping = asTrie(compatMappingTrieEntries);
|
alias mapping = compatMappingTrie;
|
||||||
}
|
}
|
||||||
ushort idx = mapping[ch];
|
ushort idx = mapping[ch];
|
||||||
if(!idx) // not found, check hangul arithmetic decomposition
|
if(!idx) // not found, check hangul arithmetic decomposition
|
||||||
|
@ -6301,13 +6297,13 @@ public bool allowedIn(NormalizationForm norm)(dchar ch)
|
||||||
private bool notAllowedIn(NormalizationForm norm)(dchar ch)
|
private bool notAllowedIn(NormalizationForm norm)(dchar ch)
|
||||||
{
|
{
|
||||||
static if(norm == NFC)
|
static if(norm == NFC)
|
||||||
static immutable qcTrie = asTrie(nfcQCTrieEntries);
|
alias qcTrie = nfcQCTrie;
|
||||||
else static if(norm == NFD)
|
else static if(norm == NFD)
|
||||||
static immutable qcTrie = asTrie(nfdQCTrieEntries);
|
alias qcTrie = nfdQCTrie;
|
||||||
else static if(norm == NFKC)
|
else static if(norm == NFKC)
|
||||||
static immutable qcTrie = asTrie(nfkcQCTrieEntries);
|
alias qcTrie = nfkcQCTrie;
|
||||||
else static if(norm == NFKD)
|
else static if(norm == NFKD)
|
||||||
static immutable qcTrie = asTrie(nfkdQCTrieEntries);
|
alias qcTrie = nfkdQCTrie;
|
||||||
else
|
else
|
||||||
static assert("Unknown normalization form "~norm);
|
static assert("Unknown normalization form "~norm);
|
||||||
return qcTrie[ch];
|
return qcTrie[ch];
|
||||||
|
@ -6344,7 +6340,7 @@ else
|
||||||
@trusted pure nothrow
|
@trusted pure nothrow
|
||||||
ushort toLowerIndex(dchar c)
|
ushort toLowerIndex(dchar c)
|
||||||
{
|
{
|
||||||
static immutable trie = asTrie(toLowerIndexTrieEntries);
|
alias trie = toLowerIndexTrie;
|
||||||
return trie[c];
|
return trie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6359,7 +6355,7 @@ dchar toLowerTab(size_t idx)
|
||||||
@trusted pure nothrow
|
@trusted pure nothrow
|
||||||
ushort toTitleIndex(dchar c)
|
ushort toTitleIndex(dchar c)
|
||||||
{
|
{
|
||||||
static immutable trie = asTrie(toTitleIndexTrieEntries);
|
alias trie = toTitleIndexTrie;
|
||||||
return trie[c];
|
return trie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6374,7 +6370,7 @@ dchar toTitleTab(size_t idx)
|
||||||
@trusted pure nothrow
|
@trusted pure nothrow
|
||||||
ushort toUpperIndex(dchar c)
|
ushort toUpperIndex(dchar c)
|
||||||
{
|
{
|
||||||
static immutable trie = asTrie(toUpperIndexTrieEntries);
|
alias trie = toUpperIndexTrie;
|
||||||
return trie[c];
|
return trie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6412,7 +6408,6 @@ bool isLower(dchar c)
|
||||||
{
|
{
|
||||||
if(std.ascii.isASCII(c))
|
if(std.ascii.isASCII(c))
|
||||||
return std.ascii.isLower(c);
|
return std.ascii.isLower(c);
|
||||||
static immutable lowerCaseTrie = asTrie(lowerCaseTrieEntries);
|
|
||||||
return lowerCaseTrie[c];
|
return lowerCaseTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6451,7 +6446,6 @@ bool isUpper(dchar c)
|
||||||
{
|
{
|
||||||
if(std.ascii.isASCII(c))
|
if(std.ascii.isASCII(c))
|
||||||
return std.ascii.isUpper(c);
|
return std.ascii.isUpper(c);
|
||||||
static immutable upperCaseTrie = asTrie(upperCaseTrieEntries);
|
|
||||||
return upperCaseTrie[c];
|
return upperCaseTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7093,7 +7087,6 @@ bool isAlpha(dchar c)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static immutable alphaTrie = asTrie(alphaTrieEntries);
|
|
||||||
return alphaTrie[c];
|
return alphaTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7114,7 +7107,6 @@ bool isAlpha(dchar c)
|
||||||
@safe pure nothrow
|
@safe pure nothrow
|
||||||
bool isMark(dchar c)
|
bool isMark(dchar c)
|
||||||
{
|
{
|
||||||
static immutable markTrie = asTrie(markTrieEntries);
|
|
||||||
return markTrie[c];
|
return markTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7134,7 +7126,6 @@ bool isMark(dchar c)
|
||||||
@safe pure nothrow
|
@safe pure nothrow
|
||||||
bool isNumber(dchar c)
|
bool isNumber(dchar c)
|
||||||
{
|
{
|
||||||
static immutable numberTrie = asTrie(numberTrieEntries);
|
|
||||||
return numberTrie[c];
|
return numberTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7155,7 +7146,6 @@ bool isNumber(dchar c)
|
||||||
@safe pure nothrow
|
@safe pure nothrow
|
||||||
bool isPunctuation(dchar c)
|
bool isPunctuation(dchar c)
|
||||||
{
|
{
|
||||||
static immutable punctuationTrie = asTrie(punctuationTrieEntries);
|
|
||||||
return punctuationTrie[c];
|
return punctuationTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7179,7 +7169,6 @@ unittest
|
||||||
@safe pure nothrow
|
@safe pure nothrow
|
||||||
bool isSymbol(dchar c)
|
bool isSymbol(dchar c)
|
||||||
{
|
{
|
||||||
static immutable symbolTrie = asTrie(symbolTrieEntries);
|
|
||||||
return symbolTrie[c];
|
return symbolTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7225,7 +7214,6 @@ unittest
|
||||||
@safe pure nothrow
|
@safe pure nothrow
|
||||||
bool isGraphical(dchar c)
|
bool isGraphical(dchar c)
|
||||||
{
|
{
|
||||||
static immutable graphicalTrie = asTrie(graphicalTrieEntries);
|
|
||||||
return graphicalTrie[c];
|
return graphicalTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7333,7 +7321,6 @@ bool isSurrogateLo(dchar c)
|
||||||
@safe pure nothrow
|
@safe pure nothrow
|
||||||
bool isNonCharacter(dchar c)
|
bool isNonCharacter(dchar c)
|
||||||
{
|
{
|
||||||
static immutable nonCharacterTrie = asTrie(nonCharacterTrieEntries);
|
|
||||||
return nonCharacterTrie[c];
|
return nonCharacterTrie[c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7353,11 +7340,43 @@ private:
|
||||||
return CodepointSet(decompressIntervals(compressed));
|
return CodepointSet(decompressIntervals(compressed));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto asTrie(T...)(in TrieEntry!T e)
|
@safe pure nothrow auto asTrie(T...)(in TrieEntry!T e)
|
||||||
{
|
{
|
||||||
return const(CodepointTrie!T)(e.offsets, e.sizes, e.data);
|
return const(CodepointTrie!T)(e.offsets, e.sizes, e.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@safe pure nothrow @property
|
||||||
|
{
|
||||||
|
// It's important to use auto return here, so that the compiler
|
||||||
|
// only runs semantic on the return type if the function gets
|
||||||
|
// used. Also these are functions rather than templates to not
|
||||||
|
// increase the object size of the caller.
|
||||||
|
auto lowerCaseTrie() { static immutable res = asTrie(lowerCaseTrieEntries); return res; }
|
||||||
|
auto upperCaseTrie() { static immutable res = asTrie(upperCaseTrieEntries); return res; }
|
||||||
|
auto simpleCaseTrie() { static immutable res = asTrie(simpleCaseTrieEntries); return res; }
|
||||||
|
auto fullCaseTrie() { static immutable res = asTrie(fullCaseTrieEntries); return res; }
|
||||||
|
auto alphaTrie() { static immutable res = asTrie(alphaTrieEntries); return res; }
|
||||||
|
auto markTrie() { static immutable res = asTrie(markTrieEntries); return res; }
|
||||||
|
auto numberTrie() { static immutable res = asTrie(numberTrieEntries); return res; }
|
||||||
|
auto punctuationTrie() { static immutable res = asTrie(punctuationTrieEntries); return res; }
|
||||||
|
auto symbolTrie() { static immutable res = asTrie(symbolTrieEntries); return res; }
|
||||||
|
auto graphicalTrie() { static immutable res = asTrie(graphicalTrieEntries); return res; }
|
||||||
|
auto nonCharacterTrie() { static immutable res = asTrie(nonCharacterTrieEntries); return res; }
|
||||||
|
auto nfcQCTrie() { static immutable res = asTrie(nfcQCTrieEntries); return res; }
|
||||||
|
auto nfdQCTrie() { static immutable res = asTrie(nfdQCTrieEntries); return res; }
|
||||||
|
auto nfkcQCTrie() { static immutable res = asTrie(nfkcQCTrieEntries); return res; }
|
||||||
|
auto nfkdQCTrie() { static immutable res = asTrie(nfkdQCTrieEntries); return res; }
|
||||||
|
auto mcTrie() { static immutable res = asTrie(mcTrieEntries); return res; }
|
||||||
|
auto graphemeExtendTrie() { static immutable res = asTrie(graphemeExtendTrieEntries); return res; }
|
||||||
|
auto combiningClassTrie() { static immutable res = asTrie(combiningClassTrieEntries); return res; }
|
||||||
|
auto compatMappingTrie() { static immutable res = asTrie(compatMappingTrieEntries); return res; }
|
||||||
|
auto canonMappingTrie() { static immutable res = asTrie(canonMappingTrieEntries); return res; }
|
||||||
|
auto compositionJumpTrie() { static immutable res = asTrie(compositionJumpTrieEntries); return res; }
|
||||||
|
auto toUpperIndexTrie() { static immutable res = asTrie(toUpperIndexTrieEntries); return res; }
|
||||||
|
auto toLowerIndexTrie() { static immutable res = asTrie(toLowerIndexTrieEntries); return res; }
|
||||||
|
auto toTitleIndexTrie() { static immutable res = asTrie(toTitleIndexTrieEntries); return res; }
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: move sets below to Tries
|
// TODO: move sets below to Tries
|
||||||
__gshared CodepointSet hangLV;
|
__gshared CodepointSet hangLV;
|
||||||
__gshared CodepointSet hangLVT;
|
__gshared CodepointSet hangLVT;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue