Overview
Comment: | Add fast enumeration to OFSet. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
cbf0b4dd916b8f0d7f9b89d53cbeda76 |
User & Date: | js on 2011-07-19 23:04:42 |
Other Links: | manifest | tags |
Context
2011-07-19
| ||
23:28 | Make OFFastEnumeration part of OFCollection. check-in: ab71981cda user: js tags: trunk | |
23:04 | Add fast enumeration to OFSet. check-in: cbf0b4dd91 user: js tags: trunk | |
22:53 | Fast enumeration improvements. check-in: c52a5e5faf user: js tags: trunk | |
Changes
Modified src/OFSet.h from [1df2b6e5f6] to [a13751ccb0].
︙ | ︙ | |||
21 22 23 24 25 26 27 | @class OFMutableDictionary; @class OFArray; /** * \brief An unordered set of unique objects. */ | | > | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | @class OFMutableDictionary; @class OFArray; /** * \brief An unordered set of unique objects. */ @interface OFSet: OFObject <OFCollection, OFCopying, OFMutableCopying, OFFastEnumeration> { OFMutableDictionary *dictionary; } /** * \brief Returns a new, autoreleased set. * |
︙ | ︙ |
Modified src/OFSet.m from [aa96a6ecd5] to [a5a149b673].
︙ | ︙ | |||
264 265 266 267 268 269 270 271 | return NO; } - (OFEnumerator*)objectEnumerator { return [dictionary keyEnumerator]; } @end | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 | return NO; } - (OFEnumerator*)objectEnumerator { return [dictionary keyEnumerator]; } - (int)countByEnumeratingWithState: (of_fast_enumeration_state_t*)state objects: (id*)objects count: (int)count { OFAutoreleasePool *pool = state->extra.pointers[0]; OFEnumerator *enumerator = state->extra.pointers[1]; int i; state->itemsPtr = objects; state->mutationsPtr = (unsigned long*)self; if (state->state == -1) return 0; if (state->state == 0) { pool = [[OFAutoreleasePool alloc] init]; enumerator = [dictionary keyEnumerator]; state->extra.pointers[0] = pool; state->extra.pointers[1] = enumerator; state->state = 1; } for (i = 0; i < count; i++) { id object = [enumerator nextObject]; if (object == nil) { [pool release]; state->state = -1; return i; } objects[i] = object; } return count; } @end |
Modified tests/OFSet.m from [32e4ef9e41] to [6401139555].
︙ | ︙ | |||
26 27 28 29 30 31 32 33 34 35 36 37 38 39 | @implementation TestsAppDelegate (OFSetTests) - (void)setTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFSet *set1, *set2; OFMutableSet *mutableSet; TEST(@"+[setWithArray:]", (set1 = [OFSet setWithArray: [OFArray arrayWithObjects: @"foo", @"bar", @"baz", @"foo", @"x", nil]])) TEST(@"+[setWithObjects:]", (set2 = [OFSet setWithObjects: @"foo", @"bar", @"baz", @"bar", @"x", | > > > > | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | @implementation TestsAppDelegate (OFSetTests) - (void)setTests { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFSet *set1, *set2; OFMutableSet *mutableSet; #ifdef OF_HAVE_FAST_ENUMERATION BOOL ok; size_t i; #endif TEST(@"+[setWithArray:]", (set1 = [OFSet setWithArray: [OFArray arrayWithObjects: @"foo", @"bar", @"baz", @"foo", @"x", nil]])) TEST(@"+[setWithObjects:]", (set2 = [OFSet setWithObjects: @"foo", @"bar", @"baz", @"bar", @"x", |
︙ | ︙ | |||
66 67 68 69 70 71 72 73 74 75 76 | [mutableSet isSubsetOfSet: set1] && ![set1 isSubsetOfSet: mutableSet]); TEST(@"-[intersectsSet:]", [(set2 = [OFSet setWithObjects: @"x", nil]) intersectsSet: set1] && [set1 intersectsSet: set2] && ![([OFSet setWithObjects: @"1", nil]) intersectsSet: set1]); [pool drain]; } @end | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | [mutableSet isSubsetOfSet: set1] && ![set1 isSubsetOfSet: mutableSet]); TEST(@"-[intersectsSet:]", [(set2 = [OFSet setWithObjects: @"x", nil]) intersectsSet: set1] && [set1 intersectsSet: set2] && ![([OFSet setWithObjects: @"1", nil]) intersectsSet: set1]); #ifdef OF_HAVE_FAST_ENUMERATION ok = YES; i = 0; for (OFString *s in set1) { switch (i) { case 0: if (![s isEqual: @"bar"]) ok = NO; break; case 1: if (![s isEqual: @"baz"]) ok = NO; break; case 2: if (![s isEqual: @"foo"]) ok = NO; break; case 3: if (![s isEqual: @"x"]) ok = NO; break; } i++; } if (i != 4) ok = NO; TEST(@"Fast enumeration", ok) #endif [pool drain]; } @end |