This is MOStringComparing.m in view mode; [Download] [Up]
// MOStringComparing.m
//
// by Mike Ferris
// Part of MOKit
// Copyright 1993, all rights reserved.
// ABOUT MOKit
// by Mike Ferris (mike@lorax.com)
//
// MOKit is a collection of useful and general objects. Permission is
// granted by the author to use MOKit in your own programs in any way
// you see fit. All other rights pertaining to the kit are reserved by the
// author including the right to sell these objects as objects, as part
// of a LIBRARY, or as SOURCE CODE. In plain English, I wish to retain
// rights to these objects as objects, but allow the use of the objects
// as pieces in a fully functional program. Permission is also granted to
// redistribute the source code of MOKit for FREE as long as this copyright
// notice is left intact and unchanged. NO WARRANTY is expressed or implied.
// The author will under no circumstances be held responsible for ANY
// consequences from the use of these objects. Since you don't have to pay
// for them, and full source is provided, I think this is perfectly fair.
#import "MOKit/MOString.h"
extern char *MOBuildStringFromFormatV(const char *formatStr,
va_list param_list);
@implementation MOString(Comparing)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// =-=-=-=-=-=-=-=-=-=-=-=-=- Comparing MOStrings -=-=-=-=-=-=-=-=-=-=-=-=-=
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- (int)compare:stringObject
// Calls compareStr:[stringObject stringValue] caseSensitive:YES length:-1
// withTable:NULL.
// See the comment for that method.
{
if (!stringObject) {
return [self compareStr:NULL caseSensitive:YES length:-1
withTable:NULL];
} else {
return [self compareStr:[stringObject stringValue] caseSensitive:YES
length:-1 withTable:NULL];
}
}
- (int)compare:stringObject caseSensitive:(BOOL)flag
// Calls compareStr:[stringObject stringValue] caseSensitive:flag length:-1
// withTable:NULL.
// See the comment for that method.
{
if (!stringObject) {
return [self compareStr:NULL caseSensitive:flag length:-1
withTable:NULL];
} else {
return [self compareStr:[stringObject stringValue] caseSensitive:flag
length:-1 withTable:NULL];
}
}
- (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length
// Calls compareStr:[stringObject stringValue] caseSensitive:flag length:length
// withTable:NULL.
// See the comment for that method.
{
if (!stringObject) {
return [self compareStr:NULL caseSensitive:flag length:length
withTable:NULL];
} else {
return [self compareStr:[stringObject stringValue] caseSensitive:flag
length:length withTable:NULL];
}
}
- (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length
withTable:(NXStringOrderTable *)table
// Calls compareStr:[stringObject stringValue] caseSensitive:flag length:length
// withTable:table.
// See the comment for that method.
{
if (!stringObject) {
return [self compareStr:NULL caseSensitive:flag length:length
withTable:table];
} else {
return [self compareStr:[stringObject stringValue] caseSensitive:flag
length:length withTable:table];
}
}
- (int)compareStr:(const char *)s
// Calls compareStr:s caseSensitive:YES length:-1 withTable:NULL.
// See the comment for that method.
{
return [self compareStr:s caseSensitive:YES length:-1 withTable:NULL];
}
- (int)compareStr:(const char *)s caseSensitive:(BOOL)flag
// Calls compareStr:s caseSensitive:flag length:-1 withTable:NULL.
// See the comment for that method.
{
return [self compareStr:s caseSensitive:flag length:-1 withTable:NULL];
}
- (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length
// Calls compareStr:s caseSensitive:flag length:length withTable:NULL.
// See the comment for that method.
{
return [self compareStr:s caseSensitive:flag length:length withTable:NULL];
}
- (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length
withTable:(NXStringOrderTable *)table
// Returns 1, 0, or -1 meaning that the receiver's string is greater than,
// equal to, or less than the given char string.
// Returns -2 if len is too big for either string. NULL strings are less
// than any other string. Two null strings are equal. flag determines
// whether case is significant. len sets a limit on the number of characters
// from each string to use for comparison. A length of -1 means the whole
// string. table is a string order table. A NULL table means use the
// default string table.
{
// Null strings are the "least"
if ((!(isUnique?uStr:str)) && (!s)) {
return 0;
} else if (!(isUnique?uStr:str)) {
return -1;
} else if (!s) {
return 1;
}
// len greater than the length of either string is a no-no.
if ((length > (int)len) || (length > (int)strlen(s))) {
return -2;
}
return NXOrderStrings((isUnique?uStr:str), s, flag, length, table);
}
- (int)endCompare:stringObject
// Calls endCompareStr:[stringObject stringValue] caseSensitive:YES length:-1
// withTable:NULL.
// See the comment for that method.
{
if (!stringObject) {
return [self endCompareStr:NULL caseSensitive:YES length:-1
withTable:NULL];
} else {
return [self endCompareStr:[stringObject stringValue]
caseSensitive:YES length:-1 withTable:NULL];
}
}
- (int)endCompare:stringObject caseSensitive:(BOOL)flag
// Calls endCompareStr:[stringObject stringValue] caseSensitive:flag length:-1
// withTable:NULL.
// See the comment for that method.
{
if (!stringObject) {
return [self endCompareStr:NULL caseSensitive:flag length:-1
withTable:NULL];
} else {
return [self endCompareStr:[stringObject stringValue]
caseSensitive:flag length:-1 withTable:NULL];
}
}
- (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length
// Calls endCompareStr:[stringObject stringValue] caseSensitive:flag
// length:length withTable:NULL.
// See the comment for that method.
{
if (!stringObject) {
return [self endCompareStr:NULL caseSensitive:flag length:length
withTable:NULL];
} else {
return [self endCompareStr:[stringObject stringValue]
caseSensitive:flag length:length withTable:NULL];
}
}
- (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length
withTable:(NXStringOrderTable *)table
// Calls endCompareStr:[stringObject stringValue] caseSensitive:flag
// length:length withTable:table.
// See the comment for that method.
{
if (!stringObject) {
return [self endCompareStr:NULL caseSensitive:flag length:length
withTable:table];
} else {
return [self endCompareStr:[stringObject stringValue]
caseSensitive:flag length:length withTable:table];
}
}
- (int)endCompareStr:(const char *)s
// Calls endCompareStr:s caseSensitive:YES length:-1 withTable:NULL.
// See the comment for that method.
{
return [self endCompareStr:s caseSensitive:YES
length:-1 withTable:NULL];
}
- (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag
// Calls endCompareStr:s caseSensitive:flag length:-1 withTable:NULL.
// See the comment for that method.
{
return [self endCompareStr:s caseSensitive:flag
length:-1 withTable:NULL];
}
- (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag
length:(int)length
// Calls endCompareStr:s caseSensitive:flag length:length withTable:NULL.
// See the comment for that method.
{
return [self endCompareStr:s caseSensitive:flag
length:length withTable:NULL];
}
- (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag
length:(int)length withTable:(NXStringOrderTable *)table
// Both s and the MOString's contents must be non-null and non-empty.
// The last length characters of s are compared to the last length
// characters of the string's contents (str). If length is -1, then s
// must be no longer than str and the strlen of s is used for the length.
// Returns 1, 0 or -1 meaning that the receiver's string is greater than,
// equal to or less than s. Returns -2 if there are length problems.
// flag determines if case is considered significant for the comparison.
// table is an optional string order table. If it is NULL, the default
// order table will be used.
{
const char *strIndex, *sIndex;
int sLen;
// No null or empty strings allowed for end comparison
if ((!s) || (!*s) || (!(isUnique?uStr:str)) || (!(isUnique?*uStr:*str))) {
return -2;
}
sLen = strlen(s);
// If no length is provided use strlen(s)
if (length == -1) {
length = sLen;
}
// length must be no longer than either string
if ((length > len) || (length > sLen)) {
return -2;
}
// Figure out where to start on both strings
strIndex = ((isUnique?uStr:str) + len - length);
sIndex = (s + sLen - length);
return NXOrderStrings(strIndex, sIndex, flag, length, table);
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.