Skip to content

Commit

Permalink
isValueAcceptable is now a plain function with a static array of clas…
Browse files Browse the repository at this point in the history
…s objects to avoid excessive allocations for each check
  • Loading branch information
gwk committed Feb 11, 2013
1 parent eea5c83 commit ed3ac84
Showing 1 changed file with 13 additions and 15 deletions.
28 changes: 13 additions & 15 deletions src/FSN_categories.m
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -22,34 +22,32 @@ BOOL httpCodeIsOfClass(int httpCode, FSNHTTPCodeClass httpClass) {
@implementation NSDictionary (FSN) @implementation NSDictionary (FSN)




- (NSString *)urlQueryString { BOOL isValueAcceptable(id val) {
static NSArray* acceptableValueClasses = nil;
if (!acceptableValueClasses) {
acceptableValueClasses = @[[NSArray class], [NSNumber class], [NSString class]];
}
for (Class klass in acceptableValueClasses) {
if ([val isKindOfClass:klass])
return YES;
}
return NO;
};



- (NSString *)urlQueryString {
NSMutableString *string = [NSMutableString string]; NSMutableString *string = [NSMutableString string];
BOOL first = YES; BOOL first = YES;
NSArray *acceptableValueClasses = @[[NSArray class],
[NSNumber class],
[NSString class]];

BOOL (^isValueAcceptable)(id) = ^(id val) {
for (Class klass in acceptableValueClasses) {
if ([val isKindOfClass:klass])
return YES;
}
return NO;
};


for (id key in self) { for (id key in self) {
id val = [self objectForKey:key]; id val = [self objectForKey:key];

if (![key isKindOfClass:[NSString class]] || !isValueAcceptable(val)) { if (![key isKindOfClass:[NSString class]] || !isValueAcceptable(val)) {
FSNLogError(@"skipping bad parameter: key class: %@ key: %@; value class: %@; value: %@", FSNLogError(@"skipping bad parameter: key class: %@ key: %@; value class: %@; value: %@",
[key class], key, [val class], val); [key class], key, [val class], val);
NSAssert(0, @"bad parameter type"); NSAssert(0, @"bad parameter type");
continue; continue;
} }

[string appendFormat:@"%@%@=%@", (first ? @"" : @"&"), [key urlEncodedString], [val urlEncodedString]]; [string appendFormat:@"%@%@=%@", (first ? @"" : @"&"), [key urlEncodedString], [val urlEncodedString]];

first = NO; first = NO;
} }
return string; return string;
Expand Down

0 comments on commit ed3ac84

Please sign in to comment.