summaryrefslogtreecommitdiff
path: root/objective-c/src/Ice/SlicedData.mm
blob: da6e9ed1b253fb784e054138e46e450ad9a9442b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// **********************************************************************
//
// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in
// the ICE_LICENSE file included in this distribution.
//
// **********************************************************************

#import <SlicedDataI.h>
#import <Util.h>

#import <Ice/SlicedData.h>

@implementation ICESlicedData

-(id) initWithSlicedData:(Ice::SlicedData*)slicedData
{
    self = [super init];
    if(!self)
    {
        return nil;
    }
    self->slicedData_ = slicedData;
    self->slicedData_->__incRef();
    return self;
}

-(void) dealloc
{
    self->slicedData_->__decRef();
    [super dealloc];
}

-(Ice::SlicedData*) slicedData
{
    return slicedData_;
}

@end

@implementation ICEUnknownSlicedValue

-(id) init
{
    self = [super init];
    if(!self)
    {
        return nil;
    }
    self->unknownTypeId_ = nil;
    self->slicedData_ = nil;
    return self;
}

-(void) dealloc
{
    [slicedData_ release];
    [unknownTypeId_ release];
    [super dealloc];
}

-(NSString*) getUnknownTypeId
{
    return [[unknownTypeId_ retain] autorelease];
}

-(ICESlicedData*) getSlicedData
{
    return [[slicedData_ retain] autorelease];
}

-(void) iceWrite:(id<ICEOutputStream>)os
{
    [os startValue:slicedData_];
    [os endValue];
}

-(void) iceRead:(id<ICEInputStream>)is
{
    [is startValue];
    slicedData_ = [is endValue:YES];

    // Initialize unknown type ID to type ID of first slice.
    Ice::SlicedData* slicedData = [((ICESlicedData*)slicedData_) slicedData];
    assert(!slicedData->slices.empty());
    unknownTypeId_ = toNSString(slicedData->slices[0]->typeId);
}
@end