1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
#include "AggregateEvent.h"
#include "../General/Macros.h"
@implementation AggregateEvent
+ (PajeEntity *)entityWithEntities:(NSArray *)entities;
{
return [[[self alloc] initWithEntities:entities] autorelease];
}
- (id)initWithEntities:(NSArray *)entities
{
NSEnumerator *entityEnum;
PajeEntity *entity;
PajeEntity *lastEntity;
entityEnum = [entities objectEnumerator];
entity = [entityEnum nextObject];
NSParameterAssert(entity != nil);
self = [super initWithType:[entity entityType]
name:@"AggregateEvent"
container:[entity container]];
if (self != nil) {
condensedArray = [[CondensedEntitiesArray alloc] init];
Assign(endTime, [entity endTime]);
do {
[condensedArray addArray:[entity condensedEntities]];
condensedEntitiesCount += [entity condensedEntitiesCount];
if (![entity isAggregate]) {
[condensedArray addValue:[entity value] count:1];
condensedEntitiesCount ++;
}
lastEntity = entity;
} while ((entity = [entityEnum nextObject]) != nil);
Assign(startTime, [lastEntity startTime]);
}
return self;
}
- (void)dealloc
{
Assign(condensedArray, nil);
Assign(startTime, nil);
Assign(endTime, nil);
[super dealloc];
}
- (BOOL)isAggregate
{
return YES;
}
- (NSDate *)startTime
{
return startTime;
}
- (NSDate *)time
{
return startTime;
}
- (NSDate *)endTime
{
return endTime;
}
- (double)exclusiveDuration
{
return 0.0;
}
- (unsigned)condensedEntitiesCount
{
return condensedEntitiesCount;
}
- (CondensedEntitiesArray *)condensedEntities
{
return condensedArray;
}
- (unsigned)subCount
{
return [condensedArray count];
}
- (id)subValueAtIndex:(unsigned)i
{
return [condensedArray valueAtIndex:i];
}
- (NSColor *)subColorAtIndex:(unsigned)i
{
return [entityType colorForValue:[condensedArray valueAtIndex:i]];
}
- (unsigned)subCountAtIndex:(unsigned)i
{
return [condensedArray countAtIndex:i];
}
- (double)subDurationAtIndex:(unsigned)i
{
return [self duration] * [condensedArray countAtIndex:i]
/ condensedEntitiesCount;
}
- (NSColor *)color
{
return [NSColor whiteColor];
}
@end
|