This is SortableObject.m in view mode; [Download] [Up]
#import "SortableObject.h" #import <libc.h> #ifdef DEBUG # define LOCAL static #else # define LOCAL volatile #endif @implementation Object(SortableObject) - (int) compare: anObject typeID:(int) typeID size:(int) size keyMethod:(SEL) keyMethod { LOCAL void *void1, *void2, *(*keyValue1)(id, SEL), *(*keyValue2)(id, SEL); LOCAL int i1, i2; LOCAL char *s1, *s2; LOCAL int compareValue; keyValue1 = (void *(*)(id, SEL))[self methodFor: keyMethod]; keyValue2 = (void *(*)(id, SEL))[anObject methodFor: keyMethod]; switch( typeID ) { case eIntType: i1 = (int) keyValue1(self, keyMethod); i2 = (int) keyValue2(anObject, keyMethod); compareValue = i1 - i2; break; case eStringType: s1 = (char *) keyValue1(self, keyMethod); s2 = (char *) keyValue2(anObject, keyMethod); compareValue = strcmp(s1, s2); break; case eVoidType: void1 = keyValue1(self, keyMethod); void2 = keyValue2(anObject, keyMethod); compareValue = bcmp(&void1, &void2, size); break; default: [self error:"Invalid typeID[%d] in %s", typeID, sel_getName(_cmd)]; break; } return compareValue; } - (int) compareTo:(void *) data typeID:(int) typeID size:(int) size keyMethod:(SEL) keyMethod { void *void1, *void2, *(*keyValue)(id, SEL); int i1, i2; char *s1, *s2; int compareValue; keyValue = (void *(*)(id, SEL))[self methodFor: keyMethod]; switch( typeID ) { case eIntType: i1 = (int) keyValue(self, keyMethod); i2 = (int) data; compareValue = i1 - i2; break; case eStringType: s1 = (char *) keyValue(self, keyMethod); s2 = (char *) data; compareValue = strcmp(s1, s2); break; case eVoidType: void1 = keyValue(self, keyMethod); void2 = data; compareValue = bcmp(&void1, &void2, size); break; default: [self error:"Invalid typeID[%d] in %s", typeID, sel_getName(_cmd)]; break; } return compareValue; } @end /* RCS Information: $Author: me $; $Date: 93/02/23 02:02:06 $; $Source: /usr1/me/NeXTSrc/MyClasses/RCS/SortableObject.m,v $; $Revision: 1.1 $; $Log: SortableObject.m,v $ Revision 1.1 93/02/23 02:02:06 me Begin RCS logging. ; */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.