1// 2// Copyright (c) ZeroC, Inc. All rights reserved. 3// 4 5#import <SlicedDataI.h> 6#import <Util.h> 7 8#import <Ice/SlicedData.h> 9 10@implementation ICESlicedData 11 12-(id) initWithSlicedData:(Ice::SlicedData*)slicedData 13{ 14 self = [super init]; 15 if(!self) 16 { 17 return nil; 18 } 19 self->slicedData_ = slicedData; 20 self->slicedData_->__incRef(); 21 return self; 22} 23 24-(void) dealloc 25{ 26 self->slicedData_->__decRef(); 27 [super dealloc]; 28} 29 30-(Ice::SlicedData*) slicedData 31{ 32 return slicedData_; 33} 34 35-(void) clear 36{ 37 slicedData_->clear(); 38} 39@end 40 41@implementation ICEUnknownSlicedValue 42 43-(id) init 44{ 45 self = [super init]; 46 if(!self) 47 { 48 return nil; 49 } 50 self->unknownTypeId_ = nil; 51 self->slicedData_ = nil; 52 return self; 53} 54 55-(void) dealloc 56{ 57 [slicedData_ release]; 58 [unknownTypeId_ release]; 59 [super dealloc]; 60} 61 62-(id<ICESlicedData>) ice_getSlicedData 63{ 64 return [[slicedData_ retain] autorelease]; 65} 66 67-(NSString*) ice_id 68{ 69 return [[unknownTypeId_ retain] autorelease]; 70} 71 72-(void) iceWrite:(id<ICEOutputStream>)os 73{ 74 [os startValue:slicedData_]; 75 [os endValue]; 76} 77 78-(void) iceRead:(id<ICEInputStream>)is 79{ 80 [is startValue]; 81 slicedData_ = [is endValue:YES]; 82 83 // Initialize unknown type ID to type ID of first slice. 84 Ice::SlicedData* slicedData = [((ICESlicedData*)slicedData_) slicedData]; 85 assert(!slicedData->slices.empty()); 86 unknownTypeId_ = toNSString(slicedData->slices[0]->typeId); 87} 88 89@end 90