diff --git a/PantomimeFramework/PantomimeFramework/NSData+Extensions.h b/PantomimeFramework/PantomimeFramework/NSData+Extensions.h index 853b3a9..f1b363c 100644 --- a/PantomimeFramework/PantomimeFramework/NSData+Extensions.h +++ b/PantomimeFramework/PantomimeFramework/NSData+Extensions.h @@ -260,6 +260,10 @@ */ - (NSArray *) componentsSeparatedByCString: (const char *) theCString; +/// Like `componentsSeparatedByCString`, but calls the given block with each result and the current count. +- (void)componentsSeparatedByCString:(const char *)theCString + block:(void (^)(NSData *, NSUInteger))block; + /*! @method asciiString @discussion This method turns the receiver into a NSString object. diff --git a/pantomime-lib/Framework/Pantomime/NSData+Extensions.m b/pantomime-lib/Framework/Pantomime/NSData+Extensions.m index 6f100cf..1570366 100644 --- a/pantomime-lib/Framework/Pantomime/NSData+Extensions.m +++ b/pantomime-lib/Framework/Pantomime/NSData+Extensions.m @@ -776,6 +776,29 @@ static const char *hexDigit = "0123456789ABCDEF"; return AUTORELEASE(aMutableArray); } +- (void)componentsSeparatedByCString:(const char *)theCString + block:(void (^)(NSData *, NSUInteger))block +{ + NSUInteger len = [self length]; + NSRange r1 = NSMakeRange(0,len); + + NSRange r2 = [self rangeOfCString: theCString + options: 0 + range: r1]; + + + NSUInteger count = 0; + while (r2.length) { + block([self subdataWithRange: NSMakeRange(r1.location, r2.location - r1.location)], count); + count++; + r1.location = r2.location + r2.length; + r1.length = len - r1.location; + + r2 = [self rangeOfCString: theCString options: 0 range: r1]; + } + + block([self subdataWithRange: NSMakeRange(r1.location, len - r1.location)], count); +} // //