@@ -15,20 +15,20 @@ */ #include "config.h" #import "OFMessagePackExtension.h" -#import "OFDataArray.h" +#import "OFData.h" #import "OFString.h" #import "OFInvalidArgumentException.h" @implementation OFMessagePackExtension @synthesize type = _type, data = _data; + (instancetype)extensionWithType: (int8_t)type - data: (OFDataArray *)data + data: (OFData *)data { return [[[self alloc] initWithType: type data: data] autorelease]; } @@ -36,20 +36,20 @@ { OF_INVALID_INIT_METHOD } - initWithType: (int8_t)type - data: (OFDataArray *)data + data: (OFData *)data { self = [super init]; @try { if (data == nil || [data itemSize] != 1) @throw [OFInvalidArgumentException exception]; _type = type; - _data = [data retain]; + _data = [data copy]; } @catch (id e) { [self release]; @throw e; } @@ -61,55 +61,55 @@ [_data release]; [super dealloc]; } -- (OFDataArray *)messagePackRepresentation +- (OFData *)messagePackRepresentation { - OFDataArray *ret; + OFMutableData *ret; uint8_t prefix; size_t count = [_data count]; if (count == 1) { - ret = [OFDataArray dataArrayWithCapacity: 3]; + ret = [OFMutableData dataWithCapacity: 3]; prefix = 0xD4; [ret addItem: &prefix]; [ret addItem: &_type]; } else if (count == 2) { - ret = [OFDataArray dataArrayWithCapacity: 4]; + ret = [OFMutableData dataWithCapacity: 4]; prefix = 0xD5; [ret addItem: &prefix]; [ret addItem: &_type]; } else if (count == 4) { - ret = [OFDataArray dataArrayWithCapacity: 6]; + ret = [OFMutableData dataWithCapacity: 6]; prefix = 0xD6; [ret addItem: &prefix]; [ret addItem: &_type]; } else if (count == 8) { - ret = [OFDataArray dataArrayWithCapacity: 10]; + ret = [OFMutableData dataWithCapacity: 10]; prefix = 0xD7; [ret addItem: &prefix]; [ret addItem: &_type]; } else if (count == 16) { - ret = [OFDataArray dataArrayWithCapacity: 18]; + ret = [OFMutableData dataWithCapacity: 18]; prefix = 0xD8; [ret addItem: &prefix]; [ret addItem: &_type]; } else if (count < 0x100) { uint8_t length; - ret = [OFDataArray dataArrayWithCapacity: count + 3]; + ret = [OFMutableData dataWithCapacity: count + 3]; prefix = 0xC7; [ret addItem: &prefix]; length = (uint8_t)count; @@ -117,11 +117,11 @@ [ret addItem: &_type]; } else if (count < 0x10000) { uint16_t length; - ret = [OFDataArray dataArrayWithCapacity: count + 4]; + ret = [OFMutableData dataWithCapacity: count + 4]; prefix = 0xC8; [ret addItem: &prefix]; length = OF_BSWAP16_IF_LE((uint16_t)count); @@ -130,11 +130,11 @@ [ret addItem: &_type]; } else { uint32_t length; - ret = [OFDataArray dataArrayWithCapacity: count + 6]; + ret = [OFMutableData dataWithCapacity: count + 6]; prefix = 0xC9; [ret addItem: &prefix]; length = OF_BSWAP32_IF_LE((uint32_t)count); @@ -144,10 +144,12 @@ [ret addItem: &_type]; } [ret addItems: [_data items] count: [_data count]]; + + [ret makeImmutable]; return ret; } - (OFString *)description @@ -185,19 +187,8 @@ return hash; } - copy { - OFMessagePackExtension *ret; - OFDataArray *data; - - data = [_data copy]; - @try { - ret = [[OFMessagePackExtension alloc] initWithType: _type - data: data]; - } @finally { - [data release]; - } - - return ret; + return [self retain]; } @end