Remove NSFastEnumeration for the Tokenizer and subclass the NSEnumerator instead

Memory management tends to be a bit complex in this case, especially under ARC, hence the
change to prevent a headache
This commit is contained in:
iska
2015-03-22 00:12:38 +01:00
parent 785760c625
commit 90cbccbc16
3 changed files with 6 additions and 29 deletions
+1 -4
View File
@@ -17,14 +17,11 @@
@class HTMLParser;
@interface HTMLTokenizer : NSObject <NSFastEnumeration>
@interface HTMLTokenizer : NSEnumerator
@property (nonatomic, assign) HTMLTokenizerState state;
@property (nonatomic, weak, readonly) HTMLParser *parser;
- (instancetype)initWithString:(NSString *)string;
- (HTMLToken *)nextToken;
- (NSArray *)allTokens;
@end
+3 -23
View File
@@ -45,6 +45,7 @@
BOOL _eof;
}
@property (nonatomic, weak) HTMLParser *parser;
@end
@implementation HTMLTokenizer
@@ -82,7 +83,7 @@
#pragma mark - State Machine
- (HTMLToken *)nextToken
- (id)nextObject
{
while (_eof == NO && _tokens.count == 0) {
[self read];
@@ -94,7 +95,7 @@
return nextToken;
}
- (NSArray *)allTokens
- (NSArray *)allObjects
{
while (_eof == NO) {
[self read];
@@ -126,27 +127,6 @@
[self switchToState:state];
}
#pragma mark - Fast Enumeration
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(__unsafe_unretained id [])buffer count:(NSUInteger)len
{
if (state->state == 0) {
state->mutationsPtr = &state->extra[0];
state->state = 1;
}
HTMLToken *nextToken = [self nextToken];
if (nextToken == nil) {
return 0;
}
__unsafe_unretained const id *const_ptr = (__unsafe_unretained id *)(__bridge void *)nextToken;
state->itemsPtr = (__typeof__(state->itemsPtr))const_ptr;
return 1;
}
#pragma mark - Emits
- (void)emitToken:(HTMLToken *)token
+2 -2
View File
@@ -57,7 +57,7 @@ static NSString * const TOKENIZER = @"tokenizer";
tokenizer.state = [state integerValue];
NSArray *expectedTokens = test.output;
NSArray *tokens = [tokenizer allTokens];
NSArray *tokens = [tokenizer allObjects];
XCTAssertEqualObjects(tokens, expectedTokens, @"%@", test.title);
}
}
@@ -145,7 +145,7 @@ static NSString * const TOKENIZER = @"tokenizer";
id token = nil;
do {
token = [tokenizer nextToken];
token = [tokenizer nextObject];
} while (token != nil);
}];
}