void UnivCharsetDesc::addBaseRange(const UnivCharsetDesc &baseSet, WideChar descMin, WideChar descMax, WideChar baseMin, ISet<WideChar> &baseMissing) { UnivCharsetDescIter iter(baseSet); WideChar baseMax = baseMin + (descMax - descMin); WideChar iDescMin, iDescMax; UnivChar iBaseMin; WideChar missingBaseMin = baseMin; Boolean usedAll = 0; while (iter.next(iDescMin, iDescMax, iBaseMin) && iDescMin <= baseMax) { // baseMin baseMax // iDescMin iDescMax if (iDescMax >= baseMin) { WideChar min = baseMin > iDescMin ? baseMin : iDescMin; if (min > missingBaseMin) baseMissing.addRange(missingBaseMin, min - 1); WideChar max = baseMax < iDescMax ? baseMax : iDescMax; missingBaseMin = max + 1; if (missingBaseMin == 0) usedAll = 1; ASSERT(min <= max); descToUniv_.addRange(descMin + (min - baseMin), descMin + (max - baseMin), iBaseMin + (min - iDescMin)); } } if (!usedAll && baseMax >= missingBaseMin) baseMissing.addRange(missingBaseMin, baseMax); }
void CharsetInfo::getDescSet(ISet<Char> &set) const { UnivCharsetDescIter iter(desc_); WideChar descMin, descMax; UnivChar univMin; while (iter.next(descMin, descMax, univMin)) { if (descMin > charMax) break; if (descMax > charMax) descMax = charMax; set.addRange(Char(descMin), Char(descMax)); } }