Overview
Comment: | Add OFSubdata
This replaces the hack of OFAdjacentData being able to keep a pointer to |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
d1a8c88dc6a23b22d658d699b1445748 |
User & Date: | js on 2023-08-09 08:14:56 |
Other Links: | manifest | tags |
Context
2023-08-09
| ||
08:25 | More consistent naming for concrete classes check-in: 6da6276ae7 user: js tags: trunk | |
08:14 | Add OFSubdata check-in: d1a8c88dc6 user: js tags: trunk | |
2023-08-08
| ||
21:16 | Make OFColor a proper class cluster check-in: ea9b62035b user: js tags: trunk | |
Changes
Modified src/Makefile from [a2abd7caf7] to [904bd28ea3].
︙ | ︙ | |||
203 204 205 206 207 208 209 210 211 212 213 214 215 216 | OFRangeCharacterSet.m \ OFRangeValue.m \ OFRectValue.m \ OFSandbox.m \ OFSizeValue.m \ OFStrPTime.m \ OFSubarray.m \ OFUTF8String.m \ ${LIBBASES_M} \ ${RUNTIME_AUTORELEASE_M} \ ${RUNTIME_INSTANCE_M} \ ${UNICODE_M} SRCS_FILES += OFFileIRIHandler.m SRCS_SOCKETS += OFAsyncIPSocketConnector.m \ | > | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | OFRangeCharacterSet.m \ OFRangeValue.m \ OFRectValue.m \ OFSandbox.m \ OFSizeValue.m \ OFStrPTime.m \ OFSubarray.m \ OFSubdata.m \ OFUTF8String.m \ ${LIBBASES_M} \ ${RUNTIME_AUTORELEASE_M} \ ${RUNTIME_INSTANCE_M} \ ${UNICODE_M} SRCS_FILES += OFFileIRIHandler.m SRCS_SOCKETS += OFAsyncIPSocketConnector.m \ |
︙ | ︙ |
Modified src/OFAdjacentArray.m from [6443cda90f] to [9ab2d4adfc].
︙ | ︙ | |||
229 230 231 232 233 234 235 | @throw [OFOutOfRangeException exception]; if ([self isKindOfClass: [OFMutableArray class]]) return [OFArray arrayWithObjects: (id *)_array.items + range.location count: range.length]; | | > | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | @throw [OFOutOfRangeException exception]; if ([self isKindOfClass: [OFMutableArray class]]) return [OFArray arrayWithObjects: (id *)_array.items + range.location count: range.length]; return [[[OFAdjacentSubarray alloc] initWithArray: self range: range] autorelease]; } - (bool)isEqual: (id)object { OFArray *otherArray; id const *objects, *otherObjects; size_t count; |
︙ | ︙ |
Modified src/OFAdjacentData.h from [9ef5f95f67] to [73a50c8d27].
︙ | ︙ | |||
18 19 20 21 22 23 24 | OF_ASSUME_NONNULL_BEGIN @interface OFAdjacentData: OFData { unsigned char *_Nullable _items; size_t _capacity, _count, _itemSize; bool _freeWhenDone; | < | 18 19 20 21 22 23 24 25 26 27 28 | OF_ASSUME_NONNULL_BEGIN @interface OFAdjacentData: OFData { unsigned char *_Nullable _items; size_t _capacity, _count, _itemSize; bool _freeWhenDone; } @end OF_ASSUME_NONNULL_END |
Modified src/OFAdjacentData.m from [35583b4857] to [bdc7c51f78].
︙ | ︙ | |||
94 95 96 97 98 99 100 | } - (void)dealloc { if (_freeWhenDone) OFFreeMemory(_items); | < < < < < < < < < < < < < < < < < < < < | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | } - (void)dealloc { if (_freeWhenDone) OFFreeMemory(_items); [super dealloc]; } - (size_t)count { return _count; } - (size_t)itemSize { return _itemSize; } - (const void *)items { return _items; } @end |
Modified src/OFArray.m from [baf90bc720] to [9b0a605b93].
︙ | ︙ | |||
361 362 363 364 365 366 367 | id *buffer; if (range.length > SIZE_MAX - range.location || range.location + range.length < self.count) @throw [OFOutOfRangeException exception]; if (![self isKindOfClass: [OFMutableArray class]]) | > | | 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | id *buffer; if (range.length > SIZE_MAX - range.location || range.location + range.length < self.count) @throw [OFOutOfRangeException exception]; if (![self isKindOfClass: [OFMutableArray class]]) return [[[OFSubarray alloc] initWithArray: self range: range] autorelease]; buffer = OFAllocMemory(range.length, sizeof(*buffer)); @try { [self getObjects: buffer inRange: range]; ret = [OFArray arrayWithObjects: buffer count: range.length]; } @finally { |
︙ | ︙ |
Modified src/OFData.m from [466d9af03d] to [c534072540].
︙ | ︙ | |||
27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # import "OFFile.h" # import "OFFileManager.h" #endif #import "OFIRI.h" #import "OFIRIHandler.h" #import "OFStream.h" #import "OFString.h" #import "OFSystemInfo.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFNotImplementedException.h" #import "OFOutOfMemoryException.h" #import "OFOutOfRangeException.h" | > | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | # import "OFFile.h" # import "OFFileManager.h" #endif #import "OFIRI.h" #import "OFIRIHandler.h" #import "OFStream.h" #import "OFString.h" #import "OFSubdata.h" #import "OFSystemInfo.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFNotImplementedException.h" #import "OFOutOfMemoryException.h" #import "OFOutOfRangeException.h" |
︙ | ︙ | |||
559 560 561 562 563 564 565 | OFHashFinalize(&hash); return hash; } - (OFData *)subdataWithRange: (OFRange)range { | < < > > > | | | | | 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 | OFHashFinalize(&hash); return hash; } - (OFData *)subdataWithRange: (OFRange)range { if (range.length > SIZE_MAX - range.location || range.location + range.length > self.count) @throw [OFOutOfRangeException exception]; if (![self isKindOfClass: [OFMutableData class]]) return [[[OFSubdata alloc] initWithData: self range: range] autorelease]; return [OFData dataWithItems: (const unsigned char *)self.items + (range.location * self.itemSize) count: self.count itemSize: self.itemSize]; } - (OFString *)description { OFMutableString *ret = [OFMutableString stringWithString: @"<"]; const unsigned char *items = self.items; size_t count = self.count, itemSize = self.itemSize; |
︙ | ︙ |
Modified src/OFMutableAdjacentData.h from [3610a15f14] to [0582bcc9e5].
︙ | ︙ | |||
18 19 20 21 22 23 24 | OF_ASSUME_NONNULL_BEGIN @interface OFMutableAdjacentData: OFMutableData { unsigned char *_Nullable _items; size_t _capacity, _count, _itemSize; bool _freeWhenDone; | < | 18 19 20 21 22 23 24 25 26 27 28 | OF_ASSUME_NONNULL_BEGIN @interface OFMutableAdjacentData: OFMutableData { unsigned char *_Nullable _items; size_t _capacity, _count, _itemSize; bool _freeWhenDone; } @end OF_ASSUME_NONNULL_END |
Modified src/OFSubarray.h from [6cc244c93d] to [e3a4736adc].
︙ | ︙ | |||
19 20 21 22 23 24 25 | @interface OFSubarray: OFArray { OFArray *_array; OFRange _range; } | < | 19 20 21 22 23 24 25 26 27 28 29 | @interface OFSubarray: OFArray { OFArray *_array; OFRange _range; } - (instancetype)initWithArray: (OFArray *)array range: (OFRange)range; @end OF_ASSUME_NONNULL_END |
Added src/OFSubdata.h version [125a37157e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * Copyright (c) 2008-2023 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #import "OFData.h" OF_ASSUME_NONNULL_BEGIN @interface OFSubdata: OFData { OFData *_data; OFRange _range; } - (instancetype)initWithData: (OFData *)data range: (OFRange)range; @end OF_ASSUME_NONNULL_END |
Added src/OFSubdata.m version [3275105cae].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* * Copyright (c) 2008-2023 Jonathan Schleifer <js@nil.im> * * All rights reserved. * * This file is part of ObjFW. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE.QPL included in * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #import "OFSubdata.h" @implementation OFSubdata - (instancetype)initWithData: (OFData *)data range: (OFRange)range { self = [super init]; @try { /* Should usually be retain, as it's useless with a copy */ _data = [data copy]; _range = range; } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_data release]; [super dealloc]; } - (size_t)count { return _range.length; } - (size_t)itemSize { return _data.itemSize; } - (const void *)items { return (const unsigned char *)_data.items + (_range.location * _data.itemSize); } @end |