Removing UTF-16 aware Unicode comparison code. This kind of compare

function (together with other locale aware ones) should into a new collation
support module. See python-dev for a discussion of this removal.

Note: This patch should also be applied to the 1.6 branch.
This commit is contained in:
Marc-André Lemburg 2000-08-08 08:04:29 +00:00
parent 5660639f9f
commit e5034378cc
3 changed files with 83 additions and 48 deletions

View file

@ -1,6 +1,5 @@
test_unicode test_unicode
Testing Unicode comparisons... done. Testing Unicode comparisons... done.
Testing UTF-16 code point order comparisons... done.
Testing Unicode contains method... done. Testing Unicode contains method... done.
Testing Unicode formatting strings... done. Testing Unicode formatting strings... done.
Testing builtin codecs... done. Testing builtin codecs... done.

View file

@ -168,6 +168,9 @@ assert 'abc' < u'abcd'
assert u'abc' < u'abcd' assert u'abc' < u'abcd'
print 'done.' print 'done.'
if 0:
# Move these tests to a Unicode collation module test...
print 'Testing UTF-16 code point order comparisons...', print 'Testing UTF-16 code point order comparisons...',
#No surrogates, no fixup required. #No surrogates, no fixup required.
assert u'\u0061' < u'\u20ac' assert u'\u0061' < u'\u20ac'

View file

@ -3169,6 +3169,12 @@ unicode_center(PyUnicodeObject *self, PyObject *args)
return (PyObject*) pad(self, left, marg - left, ' '); return (PyObject*) pad(self, left, marg - left, ' ');
} }
#if 0
/* This code should go into some future Unicode collation support
module. The basic comparison should compare ordinals on a naive
basis (this is what Java does and thus JPython too).
/* speedy UTF-16 code point order comparison */ /* speedy UTF-16 code point order comparison */
/* gleaned from: */ /* gleaned from: */
/* http://www-4.ibm.com/software/developer/library/utf16.html?dwzone=unicode */ /* http://www-4.ibm.com/software/developer/library/utf16.html?dwzone=unicode */
@ -3213,6 +3219,33 @@ unicode_compare(PyUnicodeObject *str1, PyUnicodeObject *str2)
return (len1 < len2) ? -1 : (len1 != len2); return (len1 < len2) ? -1 : (len1 != len2);
} }
#else
static int
unicode_compare(PyUnicodeObject *str1, PyUnicodeObject *str2)
{
register int len1, len2;
Py_UNICODE *s1 = str1->str;
Py_UNICODE *s2 = str2->str;
len1 = str1->length;
len2 = str2->length;
while (len1 > 0 && len2 > 0) {
register long diff;
diff = (long)*s1++ - (long)*s2++;
if (diff)
return (diff < 0) ? -1 : (diff != 0);
len1--; len2--;
}
return (len1 < len2) ? -1 : (len1 != len2);
}
#endif
int PyUnicode_Compare(PyObject *left, int PyUnicode_Compare(PyObject *left,
PyObject *right) PyObject *right)
{ {