/
IndexedObject.m
98 lines (79 loc) · 1.75 KB
/
IndexedObject.m
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// IndexedObject.m
// Athena
//
// Created by Scott McClaugherty on 2/16/11.
// Copyright 2011 Scott McClaugherty. All rights reserved.
//
#import "IndexedObject.h"
@implementation IndexedObject
@dynamic objectIndex;
@dynamic indexRef;
- (id) init {
self = [super init];
if (self) {
index = [[Index alloc] init];
}
return self;
}
- (id) initWithIndex:(unsigned short)_index {
self = [super init];
if (self) {
index = [[Index alloc] initWithIndex:_index];
}
return self;
}
- (void) dealloc {
[index release];
[super dealloc];
}
- (void) objectsAddedAtIndexes:(NSIndexSet *)indexes {
self.objectIndex += [indexes countOfIndexesInRange:NSMakeRange(0, index.index+1)];
}
- (void) objectsRemovedAtIndexes:(NSIndexSet *)indexes {
self.objectIndex -= [indexes countOfIndexesInRange:NSMakeRange(0, index.index)];
}
- (unsigned short) objectIndex {
return index.index;
}
- (void) setObjectIndex:(unsigned short)_index {
index.index = _index;
}
- (Index *) indexRef {
return index;
}
- (void) setIndexRef:(Index *)ref {
[index release];
index = [ref retain];
NSAssert([index object] == nil, @"Assigning index with existing object.");
[index setObject:self];
}
@end
@implementation Index
@synthesize index;
@dynamic orNull;
@synthesize object;
- (id) init {
self = [self initWithIndex:UINT16_MAX];
if (self) {
}
return self;
}
- (id) initWithIndex:(unsigned short)_index {
self = [super init];
if (self) {
index = _index;
}
return self;
}
+ (id) index {
return [[[Index alloc] init] autorelease];
}
- (NSInteger) orNull {
if (index == UINT16_MAX) {
return -1;
} else {
return index;
}
}
@end