|
|
1.1 ! root 1: /* ! 2: FoundationExtensionsPrivate.m modified by enoyau on Fri 13-Jan-1995 ! 3: ! 4: You may freely copy, distribute, and reuse the code in this example. ! 5: NeXT disclaims any warranty of any kind, expressed or implied, as to its ! 6: fitness for any particular use. ! 7: */ ! 8: /* ! 9: * Private classes for the compatibility routines between the old DO ! 10: * mechanisms and the new Foundation objects. ! 11: * ! 12: * No guarantee is made for the fitness of this code for any particular ! 13: * use. No warranty expressed or implied. Use at your own risk! ! 14: * ! 15: * Randy Tidd ! 16: * NeXT Premium Developer Support ! 17: */ ! 18: #import "FoundationExtensionsPrivate.h" ! 19: #import <remote/transport.h> ! 20: #import <foundation/NSUtilities.h> ! 21: #import <foundation/NSException.h> ! 22: ! 23: @implementation _NSArrayPlaceHolder ! 24: - initWithArray:(NSArray *)anArray ! 25: { ! 26: [super init]; ! 27: array = [anArray copy]; ! 28: return self; ! 29: } ! 30: ! 31: - free ! 32: { ! 33: [array release]; ! 34: return [super free]; ! 35: } ! 36: ! 37: - encodeUsing:(id <NXEncoding>)portal ! 38: { ! 39: unsigned count, i; ! 40: ! 41: // First encode the count ! 42: count = [array count]; ! 43: [portal encodeData:&count ofType:"i"]; ! 44: ! 45: // Then encode the objects one by one ! 46: for(i=0; i<[array count]; i++) { ! 47: [portal encodeObject:[array objectAtIndex:i]]; ! 48: } ! 49: return self; ! 50: } ! 51: ! 52: - decodeUsing:(id <NXDecoding>)portal ! 53: { ! 54: NSMutableArray *newArray = nil; ! 55: unsigned count, i; ! 56: ! 57: // We encoded the count first, and here it is ! 58: [portal decodeData:&count ofType:"i"]; ! 59: newArray = [NSMutableArray arrayWithCapacity:count]; ! 60: ! 61: // Decode the objects one by one and add them to the array ! 62: for(i=0; i<count; i++) { ! 63: [newArray addObject:[portal decodeObject]]; ! 64: } ! 65: ! 66: /* ! 67: * We return our mutable array instance here even though we might ! 68: * be the placeholder for a regular NSArray. There is usually no ! 69: * harm in returning a mutable array in place of an immutable one. ! 70: * If there is, you need to implement some smarts here to return an ! 71: * instance of the appropriate class. ! 72: */ ! 73: return newArray; ! 74: } ! 75: @end ! 76: ! 77: @implementation _NSDictionaryPlaceHolder ! 78: - initWithDictionary:(NSDictionary *)aDictionary ! 79: { ! 80: [super init]; ! 81: dictionary = [aDictionary copy]; ! 82: return self; ! 83: } ! 84: ! 85: - free ! 86: { ! 87: [dictionary release]; ! 88: return [super free]; ! 89: } ! 90: ! 91: - encodeUsing:(id <NXEncoding>)portal ! 92: { ! 93: unsigned count; ! 94: NSEnumerator *enumerator = [dictionary keyEnumerator]; ! 95: NSString *key; ! 96: ! 97: // First encode the count ! 98: count = [dictionary count]; ! 99: [portal encodeData:&count ofType:"i"]; ! 100: ! 101: // Then encode the objects one by one ! 102: while(key = [enumerator nextObject]) { ! 103: [portal encodeObject:key]; ! 104: [portal encodeObject:[dictionary objectForKey:key]]; ! 105: } ! 106: return self; ! 107: } ! 108: ! 109: - decodeUsing:(id <NXDecoding>)portal ! 110: { ! 111: NSMutableDictionary *newDictionary = nil; ! 112: unsigned count, i; ! 113: ! 114: // We encoded the count first, and here it is ! 115: [portal decodeData:&count ofType:"i"]; ! 116: newDictionary = [NSMutableDictionary dictionaryWithCapacity:count]; ! 117: ! 118: // Decode the objects one by one and add them to the array ! 119: for(i=0; i<count; i++) { ! 120: id newKey, newObject; ! 121: newKey = [portal decodeObject]; ! 122: newObject = [portal decodeObject]; ! 123: if(!newKey || !newObject) { ! 124: // This should never happen, or we're in trouble. ! 125: [NSException raise:NSInternalInconsistencyException format:@"%s: %s: can't decode key or object", ! 126: isa->name, sel_getName(_cmd)]; ! 127: } else { ! 128: [newDictionary setObject:newObject forKey:newKey]; ! 129: } ! 130: } ! 131: /* ! 132: * We return our mutable dictionary instance here even though we might ! 133: * be the placeholder for a regular NSDictionary. There is usually no ! 134: * harm in returning a mutable dictionary in place of an immutable one. ! 135: * If there is, you need to implement some smarts here to return an ! 136: * instance of the appropriate class. ! 137: */ ! 138: return newDictionary; ! 139: } ! 140: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.