ftp.nice.ch/pub/next/connectivity/infosystems/Archie.2.18.s.tar.gz#/Archie/LibClasses.subproj/MOString.h

This is MOString.h in view mode; [Download] [Up]

// MOString.h
//
// 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.

// ABOUT MOString
//
// The MOString class manages a character string.  It allocates memory and 
// frees it as necessary.  MOString's strings are NULL-terminated.
//
// Unless told otherwise a MOString owns the memory it uses to hold the string
// and it will be freed when new contents are set or when the MOString is 
// freed.  This is true unless the contents were set using the 
// -setStringValueUnique: method OR the -makeUnique: method was called 
// OR the -setShouldFree:NO method was called.
// 
// If the MOString is unique it can not be modified.
//
// If you do something weird like slapping a '\0' in the middle of the 
// string with -replaceCharAt:with:, the String forgets about anything  
// that might have been after the index where you put the '\0' (although 
// all the memory will still be freed when it's time).
//
// Also it would not be wise to do something like:
// "[aString setStringValue:([aString string] + 4)]"
// The first thing done by setStringValue: is to free the old string, 
// thus the above snippet is real bad news.  However, this might work OK
// for MOStrings that don't free their contents.

#import <appkit/appkit.h>

@interface MOString:Object <NXTransport>
{
	@protected
		char *str;
		NXAtom uStr;
		size_t len;
		BOOL isUnique;
		BOOL shouldFree;
}

// =-=-=-=-=-=-=-=-=-=-=-=- Initializing  the class -=-=-=-=-=-=-=-=-=-=-=-=

+ initialize;

// =-=-=-=-=-=-= Initializing, copying,  and freeing MOStrings =-=-=-=-=-=-=

- init;
- initStringValue:(const char *)s;
- initStringValueNoCopy:(char *)s;
- initStringValueNoCopy:(char *)s shouldFree:(BOOL)flag;	// DI
- initStringValueUnique:(const char *)s;
- initFromFormat:(const char *)formatStr, ...;
- copyFromZone:(NXZone *)zone;
- deepCopy;
- deepCopyFromZone:(NXZone *)zone;
- shallowCopy;
- shallowCopyFromZone:(NXZone *)zone;
- free;

// =-=-=-=-=-=-=-=-=-=-=-=-= Configuring MOStrings =-=-=-=-=-=-=-=-=-=-=-=-=

- setStringValue:(const char *)s;
- setStringValueNoCopy:(char *)s;
- setStringValueNoCopy:(char *)s shouldFree:(BOOL)flag;
- setStringValueUnique:(const char *)s;
- setFromFormat:(const char *)formatStr, ...;

- setIntValue:(int)val;
- setFloatValue:(float)val;
- setDoubleValue:(double)val;

- setNull;

- makeUnique;
- setShouldFree:(BOOL)flag;

// =-=-=-=-=-=-=-=-=-=-=-=-=- Querying  MOStrings -=-=-=-=-=-=-=-=-=-=-=-=-=

- (const char *)stringValue;
- (int)intValue;
- (float)floatValue;
- (double)doubleValue;
- (char *)getCopyInto:(char *)buf;

- (size_t)length;
- (unsigned int)count;
- (BOOL)isNull;
- (BOOL)isEmpty;
- (BOOL)isUnique;
- (BOOL)shouldFree;

// =-=-=-=-=-=-=-=-=-=-=-=-=-= Archiving methods =-=-=-=-=-=-=-=-=-=-=-=-=-=

- write:(NXTypedStream *)typedStream;
- read:(NXTypedStream *)typedStream;

// =-=-=-=-=-=-=-=-=-=-=-=-= NXTransport  protocol =-=-=-=-=-=-=-=-=-=-=-=-=

- encodeRemotelyFor:(NXConnection *)connection 
			freeAfterEncoding:(BOOL *)flagp isBycopy:(BOOL)isBycopy;
- encodeUsing:(id <NXEncoding>)portal;
- decodeUsing:(id <NXDecoding>)portal;

// =-=-=-=-=-=-=-=-=-=-=-=-=- Hashing and isEqual -=-=-=-=-=-=-=-=-=-=-=-=-=

- (unsigned int)hash;
- (BOOL)isEqual:anObj;

@end

@interface MOString(Parsing)

// =-=-=-=-=-=-=-=-=-=-=-=-=- Parsing  MOStrings -=-=-=-=-=-=-=-=-=-=-=-=-=

- (char)charAt:(int)index;

- substringFrom:(int)start to:(int)end;

- (int)positionOf:(char)aChar nthOccurrence:(int)n;
- (int)countOccurrencesOf:(char)aChar;

- tokenize:(const char *)breakChars into:aList;

@end

@interface MOString(Modifying)

// =-=-=-=-=-=-=-=-=-=-=-=-=- Modifying MOStrings -=-=-=-=-=-=-=-=-=-=-=-=-=

- takeStringValueFrom:sender;
- takeIntValueFrom:sender;
- takeFloatValueFrom:sender;
- takeDoubleValueFrom:sender;

- cat:stringObject;
- catStringValue:(const char *)s;
- catFromFormat:(const char *)format, ...;

- preCat:stringObject;
- preCatStringValue:(const char *)s;
- preCatFromFormat:(const char *)format, ...;

- insert:stringObject at:(int)position;
- insertStringValue:(const char *)s at:(int)position;

- (char)replaceCharAt:(int)index with:(char)newChar;
- (int)replaceAllOccurrencesOfChar:(char)oldChar with:(char)newChar;

- (size_t)recalcLength;

- convertToLower;
- convertToUpper;

@end

@interface MOString(Comparing)

// =-=-=-=-=-=-=-=-=-=-=-=-=- Comparing MOStrings -=-=-=-=-=-=-=-=-=-=-=-=-=

- (int)compare:stringObject;
- (int)compare:stringObject caseSensitive:(BOOL)flag;
- (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length;
- (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length 
			withTable:(NXStringOrderTable *)table;
- (int)compareStr:(const char *)s;
- (int)compareStr:(const char *)s caseSensitive:(BOOL)flag;
- (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length;
- (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length
			withTable:(NXStringOrderTable *)table;

- (int)endCompare:stringObject;
- (int)endCompare:stringObject caseSensitive:(BOOL)flag;
- (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length;
- (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length 
			withTable:(NXStringOrderTable *)table;
- (int)endCompareStr:(const char *)s;
- (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag;
- (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag 
			length:(int)length;
- (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag 
			length:(int)length withTable:(NXStringOrderTable *)table;

@end

@interface MOString(ANSI)

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ANSI covers -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//            (strtok is not provided... see -tokenize: above)
//                 (strcoll, and strxfrm are not provided)

- (size_t)strlen;

- (const char *)strcpy:(const char *)s;
- (const char *)strncpy:(const char *)s :(size_t)n;
- (const char *)strcat:(const char *)s;
- (const char *)strncat:(const char *)s :(size_t)n;

- (int)strcmp:(const char *)s;
- (int)strncmp:(const char *)s :(size_t)n;

- (const char *)strchr:(char)aChar;
- (const char *)strrchr:(char)aChar;
- (const char *)strstr:(const char *)searchStr;
- (const char *)strpbrk:(const char *)breakChars;

- (size_t)strspn:(const char *)acceptableChars;
- (size_t)strcspn:(const char *)breakChars;

- sprintf:(const char *)formatStr, ...;

@end

@interface MOString(Debugging)

// =-=-=-=-=-=-=-=-=-=-=-=-=-=- Debug  printing -=-=-=-=-=-=-=-=-=-=-=-=-=-=

- buildInstanceImageIn:(char *)buf;
- printForDebugger:(NXStream *)stream;
- printToStdErr:(const char *)label;

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.