This is KVPair.m in view mode; [Download] [Up]
#import "KVPair.h" #define NoNULL(string) ((string==NULL)?"":string) @implementation KVPair //----------------------------------------------------------- // IDENTIFIERS //----------------------------------------------------------- + (NXAtom)keyIdentifier; { return NXUniqueString("KVKeyIdentifier"); } + (NXAtom)valueIdentifier; { return NXUniqueString("KVValueIdentifier"); } //----------------------------------------------------------- // INIT & FREE //----------------------------------------------------------- - init:(const char *)kv delimiter:(char)del; { char *buf,*p; [self init]; buf=NXCopyStringBufferFromZone(kv,[self zone]); if(p=strchr(buf,(int)del)) { *p='\0'; p++; [self setKey:buf]; [self setValue:p]; } NXZoneFree([self zone],buf); return self; } - initKey:(const char *)aKey value:(const char *)aValue; { [self init]; [self setKey:aKey]; [self setValue:aValue]; return self; } - init; { [super init]; key=[[MiscString allocFromZone:[self zone]] init]; value=[[MiscString allocFromZone:[self zone]] init]; return self; } - free { key=[key free]; value=[value free]; return [super free]; } //----------------------------------------------------------- // COPY //----------------------------------------------------------- - copyFromZone:(NXZone *)zone; { KVPair *new=[super copyFromZone:zone]; new->key=[key copyFromZone:zone]; new->value=[value copyFromZone:zone]; return new; } //----------------------------------------------------------- // KEY //----------------------------------------------------------- - setKey:(const char *)string; { [key setStringValue:string]; [key trimWhiteSpaces]; return self; } - takeKeyFrom:anObject { return [self setKey:[anObject stringValue]]; } - (const char *)key; { const char *p=[key stringValue]; return NoNULL(p); } //----------------------------------------------------------- // VALUE //----------------------------------------------------------- - setValue:(const char *)string; { [value setStringValue:string]; [value trimWhiteSpaces]; return self; } - takeValueFrom:anObject { return [self setValue:[anObject stringValue]]; } - (const char *)value; { const char *p=[value stringValue]; return NoNULL(p); } //----------------------------------------------------------- // MiscTCRow Protocol //----------------------------------------------------------- - (void *)insertKey:(const void *)aKey value:(void *)aValue; { if(aKey==[KVPair keyIdentifier]) [self setKey:aValue]; else if(aKey==[KVPair valueIdentifier]) [self setValue:aValue]; return self; } - (void *)valueForKey:(const void *)aKey; { const void *ret=NULL; if(aKey==[KVPair keyIdentifier]) ret=[self key]; else if(aKey==[KVPair valueIdentifier]) ret=[self value]; return (void *)ret; } //----------------------------------------------------------- // TEST WHETHER EMPTY //----------------------------------------------------------- - (BOOL)isNull; { return [key emptyString]; } - (BOOL)hasValue; { return (![key emptyString] && ![value emptyString]); } //----------------------------------------------------------- // THAT'S IT //----------------------------------------------------------- @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.