ObjFW  Diff

Differences From Artifact [8ab33d1782]:

To Artifact [a275f23615]:


16
17
18
19
20
21
22
23

24
25
26

27
28
29
30

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

23

24

25

26
27

28

29
30
31
32
33
34
35







-
+
-

-
+
-


-
+
-







#include "config.h"

#import "OFSubarray.h"

#import "OFOutOfRangeException.h"

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

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

	@try {
		/* Should usually be retain, as it's useless with a copy */
		_array = [array copy];
		_range = range;
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
57
58
59
60
61
62
63

64

65
66
67
68
69
70
71

72

73
74
75
76
77
78
79







-
+
-







-
+
-







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

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

- (void)getObjects: (id *)buffer
- (void)getObjects: (id *)buffer inRange: (of_range_t)range
	   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;

	[_array getObjects: buffer
	[_array getObjects: buffer inRange: range];
		   inRange: range];
}

- (size_t)indexOfObject: (id)object
{
	size_t idx = [_array indexOfObject: object];

	if (idx < _range.location)