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