Neben den Operatoren SHL und SHR und den zugehörigen Funktionen .ShiftDown und .ShiftUp,
haben es jetzt auch noch .Lower, .Upper und .CaseLess, sowie .toLower, .toUpper und .toCaseLess reingeschafft.
Delphi-Quellcode:
Var X: TDynamicCharSet;
X := ['
a'..'
w'];
X := X
shr 3;
// X = ['d'..'z']
X := ['
a'..'
w', '
ä'];
X := X
shl 29;
// X = ['D'..'Z', 'Ç']
X := ['
a'..'
w', '
ä'];
X.Upper;
// X = ['A'..'W', 'Ä']
X := ['
a'..'
w', '
Ä'];
X.CaseLess;
// X = ['A'..'W', 'a'..'w', 'Ä', 'ä']
X := ['
a'..'
w'];
If X.toUpper.
Contains('
A')
Then JaIchBinDrin;
If X.toUpper >= ['
B']
Then JaIchBinAuchDrin;
// zu ">=": ['B'] ist ja ein SubSet von ['A'..'W']
X := ['
a'..'
w'];
// -X = alle (Unicode)Zeichen, ohne ['a'..'w']
Jetzt dürfte wohl alles drin sein, welches man mit Chars/CharSets machen kann.
Delphi-Quellcode:
X := ['0'..'9', 'a'..'f', 'A'..'F'];
X := (X * ['0'..'9']) shl 48 + (X * ['A'..'F']) shl 55 + (X * ['a'..'f']) shl 87;
// oder
X := (X and ['0'..'9']) shl 48 or (X and ['A'..'F']) shl 55 or (X and ['a'..'f']) shl 87;
// X = [#0..#15]
//
// #0 = '0' #1 = '1' #9 = '9' #10 = 'A' or 'a' #15 = 'F' or 'f'
Sowas braucht zwar keiner, aber man kann es dennoch machen.