private void AddLowercaseRange(char chMin, char chMax, CultureInfo culture) {
int i, iMax, iMid;
char chMinT, chMaxT;
LowerCaseMapping lc;
for (i = 0, iMax = _lcTable.Length; i < iMax; ) {
iMid = (i + iMax) / 2;
if (_lcTable[iMid]._chMax < chMin)
i = iMid + 1;
else
iMax = iMid;
}
if (i >= _lcTable.Length)
return;
for ( ; i < _lcTable.Length && (lc = _lcTable[i])._chMin <= chMax; i++) {
if ((chMinT = lc._chMin) < chMin)
chMinT = chMin;
if ((chMaxT = lc._chMax) > chMax)
chMaxT = chMax;
switch (lc._lcOp) {
case LowercaseSet:
chMinT = (char)lc._data;
chMaxT = (char)lc._data;
break;
case LowercaseAdd:
chMinT += (char)lc._data;
chMaxT += (char)lc._data;
break;
case LowercaseBor:
chMinT |= (char)1;
chMaxT |= (char)1;
break;
case LowercaseBad:
chMinT += (char)(chMinT & 1);
chMaxT += (char)(chMaxT & 1);
break;
}
if (chMinT < chMin || chMaxT > chMax)
AddRange(chMinT, chMaxT);
}
}