From f25344182debb14001c39db452374f138cd0ee8b Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Fri, 14 Jun 2013 14:58:16 -0400 Subject: [PATCH] Rewrote escapedForCards so it's 10 times faster. --- SOPE/NGCards/NSString+NGCards.m | 47 ++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/SOPE/NGCards/NSString+NGCards.m b/SOPE/NGCards/NSString+NGCards.m index 49c0a5798..8eef43074 100644 --- a/SOPE/NGCards/NSString+NGCards.m +++ b/SOPE/NGCards/NSString+NGCards.m @@ -155,20 +155,41 @@ - (NSString *) escapedForCards { - NSString *string; + NSMutableString *string; + unsigned int len, i; + unichar c; - string = [self stringByReplacingString: @"\\" - withString: @"\\\\"]; - string = [string stringByReplacingString: @"," - withString: @"\\,"]; - // string = [string stringByReplacingString: @":" - // withString: @"\\:"]; - string = [string stringByReplacingString: @";" - withString: @"\\;"]; - string = [string stringByReplacingString: @"\n" - withString: @"\\n"]; - string = [string stringByReplacingString: @"\r" - withString: @"\\r"]; + len = [self length]; + string = [NSMutableString stringWithCapacity: len * 1.5]; + + for (i = 0; i < len; i++) + { + c = [self characterAtIndex: i]; + + switch (c) + { + case '\\': + [string appendString: @"\\\\"]; + break; + case ',': + [string appendString: @"\\,"]; + break; + //case ':': + // [string appendString: @"\\:"]; + //break; + case ';': + [string appendString: @"\\;"]; + break; + case'\n': + [string appendString: @"\\n"]; + break; + case'\r': + [string appendString: @"\\r"]; + break; + default: + [string appendFormat: @"%C", c]; + } + } return string; }