diff --git a/wow/WoWLogSplit/WoWLogSplit.xcodeproj/project.pbxproj b/wow/WoWLogSplit/WoWLogSplit.xcodeproj/project.pbxproj index ad163cd..e64625c 100644 --- a/wow/WoWLogSplit/WoWLogSplit.xcodeproj/project.pbxproj +++ b/wow/WoWLogSplit/WoWLogSplit.xcodeproj/project.pbxproj @@ -391,6 +391,7 @@ B973D77D151505A600401595 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_ENABLE_OBJC_GC = required; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "WoWLogSplit/WoWLogSplit-Prefix.pch"; INFOPLIST_FILE = "WoWLogSplit/WoWLogSplit-Info.plist"; @@ -402,6 +403,7 @@ B973D77E151505A600401595 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + GCC_ENABLE_OBJC_GC = required; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "WoWLogSplit/WoWLogSplit-Prefix.pch"; INFOPLIST_FILE = "WoWLogSplit/WoWLogSplit-Info.plist"; diff --git a/wow/WoWLogSplit/WoWLogSplit/FileReader.h b/wow/WoWLogSplit/WoWLogSplit/FileReader.h index 306581f..bc2b82d 100644 --- a/wow/WoWLogSplit/WoWLogSplit/FileReader.h +++ b/wow/WoWLogSplit/WoWLogSplit/FileReader.h @@ -19,6 +19,7 @@ unsigned long long m_totalFileLength; /**< Total number of bytes in file. */ NSString* m_lineDelimiter; /**< Character for line break or page break. */ NSUInteger m_chunkSize; /**< Standard block size. */ + NSUInteger m_delimiterCount; } - (id)initWithFilePath:(NSString*)filePath; diff --git a/wow/WoWLogSplit/WoWLogSplit/FileReader.m b/wow/WoWLogSplit/WoWLogSplit/FileReader.m index 5676b50..82626ff 100644 --- a/wow/WoWLogSplit/WoWLogSplit/FileReader.m +++ b/wow/WoWLogSplit/WoWLogSplit/FileReader.m @@ -49,7 +49,8 @@ - (id)initWithFilePath:(NSString*)filePath { [m_fileHandle seekToEndOfFile]; m_totalFileLength = [m_fileHandle offsetInFile]; m_currentInset = m_totalFileLength; - m_prevDelimiterRange = NSMakeRange(m_currentInset, 1); + m_prevDelimiterRange = NSMakeRange(m_currentInset, 1); + m_delimiterCount = 0; NSLog(@"%qu characters in %@", m_totalFileLength, [filePath lastPathComponent]); /* DEBUG LOG */ } @@ -69,7 +70,9 @@ - (NSString*)readLine { return nil; } - NSData* newLineData = [m_lineDelimiter dataUsingEncoding:NSUTF8StringEncoding]; + static NSData* newLineData = nil; + if (!newLineData) + newLineData = [m_lineDelimiter dataUsingEncoding:NSUTF8StringEncoding]; [m_fileHandle seekToFileOffset:m_currentOffset]; NSMutableData* currentData = [[NSMutableData alloc] init]; BOOL shouldReadMore = YES; @@ -84,13 +87,19 @@ - (NSString*)readLine { if (newLineRange.location != NSNotFound) { // Include the length so we can include the delimiter in the string. NSRange subDataRange = NSMakeRange(0, newLineRange.location + [newLineData length]); + NSData *subchunk = chunk; chunk = [chunk subdataWithRange:subDataRange]; + [subchunk release], subchunk = nil; shouldReadMore = NO; + m_delimiterCount++; + m_chunkSize = MAX(m_chunkSize, MAX(10, 1 + ((m_currentOffset + [chunk length] + 2) / m_delimiterCount))); + if ((m_delimiterCount % 1000) == 0) + NSLog(@"chunkSize:%lu", m_chunkSize); } [currentData appendData:chunk]; m_currentOffset += [chunk length]; + [chunk release], chunk = nil; } - NSString* line = [currentData stringValueWithEncoding:NSUTF8StringEncoding]; // finished with data [currentData release], currentData = nil; diff --git a/wow/WoWLogSplit/WoWLogSplit/WLSAppDelegate.m b/wow/WoWLogSplit/WoWLogSplit/WLSAppDelegate.m index 504c435..540bcf7 100644 --- a/wow/WoWLogSplit/WoWLogSplit/WLSAppDelegate.m +++ b/wow/WoWLogSplit/WoWLogSplit/WLSAppDelegate.m @@ -64,10 +64,17 @@ - (IBAction)splitLogFile:(id)sender { NSLog(@"File:%@ (%@)", fileName, datePart); [[NSFileManager defaultManager] createFileAtPath:fileName contents:nil attributes:nil]; out = [NSFileHandle fileHandleForWritingAtPath:fileName]; + datePart = nil; + fileName = nil; } [out writeData:[line dataUsingEncoding:NSUTF8StringEncoding]]; + [line release], line = nil; + [data release], data = nil; } [out closeFile]; + out = nil; + [reader release], reader = nil; + [dateFormat release], dateFormat = nil; } - (IBAction)archiveSplitLogs:(id)sender { diff --git a/wow/WoWLogSplit/WoWLogSplit/WoWLogLine.m b/wow/WoWLogSplit/WoWLogSplit/WoWLogLine.m index 24fca39..65e2866 100644 --- a/wow/WoWLogSplit/WoWLogSplit/WoWLogLine.m +++ b/wow/WoWLogSplit/WoWLogSplit/WoWLogLine.m @@ -79,7 +79,7 @@ + (id) fromString:(NSString *) string NSLog(@"Bad time, h:%d m:%d s:%d ms:%d parts:%@", timeHour, timeMinute, timeSecond, timeMS, timeParts); return nil; } - WoWLogLine *line = [[WoWLogLine alloc] init]; + WoWLogLine *line = [[[WoWLogLine alloc] init] autorelease]; NSDateComponents *dc = [WoWLogLine dateComponents]; [dc setMonth:dateMonth]; [dc setDay:dateDay];