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
|