Пример #1
0
 internal static int TdbCompareStrings(IStringIterator s1, string s2, bool caseSensitive)
 {
     return TdbCompareStrings(s1, new StringStringIterator(s2), caseSensitive);
 }
Пример #2
0
 // Strings mit IEnumerable<char> zu vergleichen ist nicht sinnvoll, weil dabei jedesmal ein CharComparer-
 // Objekt erzeugt wird.
 internal static int TdbCompareStrings(IStringIterator s1, IStringIterator s2, bool caseSensitive)
 {
     int result = 0;
     int len1 = s1.Length;
     int len2 = s2.Length;
     bool inUmlaut1 = false;
     bool inUmlaut2 = false;
     int p1 = int.MaxValue;
     int p2 = int.MaxValue;
     char c1 = (char)0;
     char c2 = (char)0;
     int i1 = 0, i2 = 0;
     while ((i1 < len1) && (i2 < len2)) {
         // Character von s1 behandeln
         c1 = s1[i1];
         if (c1 == '^') c1 = ' ';
         if (c1 == 'ß') {
             c1 = 's';
             if (inUmlaut1) inUmlaut1 = false;
             else { inUmlaut1 = true; --i1; }
         } else if (c1 >= 128 && c1 < 256) {
             c1 = umlautReplacementMap[(ushort)c1 & 0x7f];
             if (p1 == int.MaxValue) p1 = i1;
         }
         if (!caseSensitive && c1 < 256) c1 = (char)upperMap[(byte)c1];
         //
         // Character von s2 behandeln
         c2 = s2[i2];
         if (c2 == '^') c2 = ' ';
         if (c2 == 'ß') {
             c2 = 's';
             if (inUmlaut2) inUmlaut2 = false;
             else { inUmlaut2 = true; --i2; }
         } else if (c2 >= 128 && c2 < 256) {
             c2 = umlautReplacementMap[(ushort)c2 & 0x7f];
             if (p2 == int.MaxValue) p2 = i2;
         }
         if (!caseSensitive && c2 < 256) c2 = (char)upperMap[(byte)c2];
         //
         if (p1 == p2) { p1 = int.MaxValue; p2 = int.MaxValue; }
         if (c1 != c2) break;
         //
         ++i1; ++i2;
     }
     if (i1 < len1 && i2 < len2) {
         if (c1 < c2) result = -1;
         else if (c1 > c2) result = +1;
         else if (p1 < p2) result = +1;
         else if (p1 > p2) result = -1;
         else result = 0;
     } else if (i1 < len1) {
         // Der linke ist länger
         result = +1;
     } else if (i2 < len2) {
         // Der rechte ist länger
         result = -1;
     } else if (p1 < p2) result = +1;
     else if (p1 > p2) result = -1;
     else result = 0;
     return result;
 }
Пример #3
0
 internal static int TdbCompareStrings(string s1, IStringIterator s2, bool caseSensitive)
 {
     return TdbCompareStrings(new StringStringIterator(s1), s2, caseSensitive);
 }