// // JSRunDistanceHistory.m // JSRun Import Framework // // Created by Jonathan on 8/30/06. // Copyright 2006 Jonathan Saggau. All rights reserved. // #import "JSRunDistanceHistory.h" @interface JSRunDistanceHistory (privateAPI) - (NSArray *)calculateDistanceTraveledPerSnapshot; @end @implementation JSRunDistanceHistory - (id) init { self = [super init]; if (self != nil) { distances = [[NSArray alloc] init]; attributes = [[NSDictionary alloc] init]; } return self; } - (NSArray *)calculateDistanceTraveledPerSnapshot; { NSMutableArray *outArray = [NSMutableArray arrayWithCapacity:[distances count]]; NSEnumerator *enumerator = [distances objectEnumerator]; NSNumber *adistance; float lastDist = 0.0; while (adistance = [enumerator nextObject]) { float currDist = [adistance floatValue]; float currSpeed = currDist - lastDist; if (lastDist != currDist) { [outArray addObject:[NSNumber numberWithFloat:currSpeed]]; } lastDist = currDist; } return outArray; } - (NSArray *)distanceTraveledPerSnapshot; { return _distanceTraveledPerSnapshot; } #pragma mark - #pragma mark accessors //=========================================================== // distances //=========================================================== - (NSArray *)distances { return distances; } - (void)setDistances:(NSArray *)aDistances { if (distances != aDistances) { [aDistances retain]; [distances release]; distances = aDistances; NSArray *tempDistances; tempDistances = [self calculateDistanceTraveledPerSnapshot]; [tempDistances retain]; [_distanceTraveledPerSnapshot release]; _distanceTraveledPerSnapshot = tempDistances; // only calculate when distances change } } //=========================================================== // attributes //=========================================================== - (NSDictionary *)attributes { return attributes; } - (void)setAttributes:(NSDictionary *)anAttributes { if (attributes != anAttributes) { [anAttributes retain]; [attributes release]; attributes = anAttributes; } } //=========================================================== // dealloc //=========================================================== - (void)dealloc { [self setDistances:nil]; [self setAttributes:nil]; [super dealloc]; } #pragma mark - #pragma mark pretty description - (NSString *)description { NSMutableString *desc = [NSMutableString stringWithFormat:@"Simple Description = %@ \n", [super description]]; [desc appendFormat:@"attributes = %@ \n", [self attributes]]; [desc appendFormat:@"distance = %@ \n", [self distances]]; return desc; } @end