ObjFW  Diff

Differences From Artifact [bf40b440c5]:

To Artifact [b087bc3ca0]:


17
18
19
20
21
22
23
24

25
26
27
28
29
30
31

32
33
34
35
36
37
38
17
18
19
20
21
22
23

24
25
26
27
28
29
30

31
32
33
34
35
36
37
38







-
+






-
+







#include "config.h"

#import "OFArray_subarray.h"

#import "OFOutOfRangeException.h"

@implementation OFArray_subarray
+ (instancetype)arrayWithArray: (OFArray*)array
+ (instancetype)arrayWithArray: (OFArray *)array
			 range: (of_range_t)range
{
	return [[[self alloc] initWithArray: array
				      range: range] autorelease];
}

- initWithArray: (OFArray*)array
- initWithArray: (OFArray *)array
	  range: (of_range_t)range
{
	self = [super init];

	@try {
		/* Should usually be retain, as it's useless with a copy */
		_array = [array copy];
61
62
63
64
65
66
67
68

69
70
71
72
73
74
75
61
62
63
64
65
66
67

68
69
70
71
72
73
74
75







-
+







{
	if (index >= _range.length)
		@throw [OFOutOfRangeException exception];

	return [_array objectAtIndex: index + _range.location];
}

- (void)getObjects: (id*)buffer
- (void)getObjects: (id *)buffer
	   inRange: (of_range_t)range
{
	if (range.length > SIZE_MAX - range.location ||
	    range.location + range.length > _range.length)
		@throw [OFOutOfRangeException exception];

	range.location += _range.location;
104
105
106
107
108
109
110
111

112
113
114
115
116
117
118
119
120
121
104
105
106
107
108
109
110

111
112
113
114
115
116
117
118
119
120
121







-
+











	if (index >= _range.length)
		return OF_NOT_FOUND;

	return index;
}

- (OFArray*)objectsInRange: (of_range_t)range
- (OFArray *)objectsInRange: (of_range_t)range
{
	if (range.length > SIZE_MAX - range.location ||
	    range.location + range.length > _range.length)
		@throw [OFOutOfRangeException exception];

	range.location += _range.location;

	return [_array objectsInRange: range];
}
@end