예제 #1
0
        private IgnoreCaseRelation CreateIgnoreCaseRelationInvariant()
        {
            EnsureDefault();

            // Compute the invariant table based off of default.
            // In the default (en-US) culture: Turkish_I_withDot = i = I
            // In the invariant culture: i = I, while Turkish_I_withDot is case-insensitive
            BDD tr_I_withdot_BDD = _solver.CharConstraint(Turkish_I_WithDot);

            // Since Turkish_I_withDot is case-insensitive in invariant culture, remove it from the default (en-US culture) table.
            BDD inv_table = _solver.And(_relationDefault.Instance, _solver.Not(tr_I_withdot_BDD));

            // Next, remove Turkish_I_withDot from the RHS of the relation.
            // This also effectively removes Turkish_I_withDot from the equivalence sets of 'i' and 'I'.
            BDD instance = _solver.And(inv_table, _solver.Not(_solver.ShiftLeft(tr_I_withdot_BDD, 16)));

            // Remove Turkish_I_withDot from the domain of casesensitive characters in the default case
            BDD instanceDomain = _solver.And(instance, _solver.Not(tr_I_withdot_BDD));

            _relationInvariant = new IgnoreCaseRelation(instance, instanceDomain);
            return(_relationInvariant);
        }