diff -r d1ed91142715 -r a4de3b9de9ec ByteArray.st --- a/ByteArray.st Mon Feb 02 17:47:33 2009 +0100 +++ b/ByteArray.st Mon Feb 02 18:15:04 2009 +0100 @@ -924,61 +924,76 @@ INT addrDelta; if (s == self) { - RETURN ( true ); + RETURN ( true ); } if (! __isNonNilObject(s)) { - RETURN ( false ); + RETURN ( false ); } cls = __qClass(s); myCls = __qClass(self); if (cls == myCls) { - cp2 = __stringVal(s); - l2 = __byteArraySize(s); - - cp1 = __stringVal(self); - l1 = __byteArraySize(self); - - if (l1 != l2) { - RETURN ( false ); - } - - /* - * care for instances of subclasses ... - */ - if (cls != ByteArray) { - int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars)); - - cp2 += n; - cp1 += n; - l1 -= n; - } - - addrDelta = cp2 - cp1; - while (l1 >= sizeof(unsigned INT)) { - if (*((unsigned INT *)cp1) != *((unsigned INT *)(cp1+addrDelta))) { - RETURN (false); - } - l1 -= sizeof(unsigned INT); - cp1 += sizeof(unsigned INT); - } - if (l1 >= sizeof(unsigned short)) { - if (*((unsigned short *)cp1) != *((unsigned short *)(cp1+addrDelta))) { - RETURN (false); - } - l1 -= sizeof(unsigned short); - cp1 += sizeof(unsigned short); - } - while (l1) { - if (*cp1 != *(cp1+addrDelta)) { - RETURN (false); - } - l1--; - cp1++; - } - - RETURN (true); + l2 = __byteArraySize(s); + l1 = __byteArraySize(self); + if (l1 != l2) { + RETURN ( false ); + } + + cp1 = __stringVal(self); + cp2 = __stringVal(s); + + /* + * care for instances of subclasses ... + */ + if (cls != ByteArray) { + int n = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars)); + + cp2 += n; + cp1 += n; + l1 -= n; + } + + addrDelta = cp2 - cp1; + while (l1 >= (sizeof(unsigned INT) * 4)) { + if (((unsigned INT *)cp1)[0] != ((unsigned INT *)(cp1+addrDelta))[0]) { + RETURN (false); + } + if (((unsigned INT *)cp1)[1] != ((unsigned INT *)(cp1+addrDelta))[1]) { + RETURN (false); + } + if (((unsigned INT *)cp1)[2] != ((unsigned INT *)(cp1+addrDelta))[2]) { + RETURN (false); + } + if (((unsigned INT *)cp1)[3] != ((unsigned INT *)(cp1+addrDelta))[3]) { + RETURN (false); + } + l1 -= sizeof(unsigned INT)*4; + cp1 += sizeof(unsigned INT)*4; + } + while (l1 >= sizeof(unsigned INT)) { + if (*((unsigned INT *)cp1) != *((unsigned INT *)(cp1+addrDelta))) { + RETURN (false); + } + l1 -= sizeof(unsigned INT); + cp1 += sizeof(unsigned INT); + } + if (l1 >= sizeof(unsigned short)) { + if (*((unsigned short *)cp1) != *((unsigned short *)(cp1+addrDelta))) { + RETURN (false); + } + l1 -= sizeof(unsigned short); + cp1 += sizeof(unsigned short); + } + while (l1) { + if (*cp1 != *(cp1+addrDelta)) { + RETURN (false); + } + l1--; + cp1++; + } + + RETURN (true); } %}. ^ super = aByteArray @@ -3195,5 +3210,5 @@ !ByteArray class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.187 2009-02-01 02:08:43 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.188 2009-02-02 17:15:04 cg Exp $' ! !