[c] Additional #2325 work, precalculate the space needed for property IDs in animations

This commit is contained in:
Mario Zechner 2023-09-06 11:07:17 +02:00
parent 066a152756
commit fed76c80c6

View File

@ -37,18 +37,22 @@ _SP_ARRAY_IMPLEMENT_TYPE(spPropertyIdArray, spPropertyId)
_SP_ARRAY_IMPLEMENT_TYPE(spTimelineArray, spTimeline *) _SP_ARRAY_IMPLEMENT_TYPE(spTimelineArray, spTimeline *)
spAnimation *spAnimation_create(const char *name, spTimelineArray *timelines, float duration) { spAnimation *spAnimation_create(const char *name, spTimelineArray *timelines, float duration) {
int i, n; int i, n, totalCount = 0;
spAnimation *self = NEW(spAnimation); spAnimation *self = NEW(spAnimation);
MALLOC_STR(self->name, name); MALLOC_STR(self->name, name);
self->timelines = timelines != NULL ? timelines : spTimelineArray_create(1); self->timelines = timelines != NULL ? timelines : spTimelineArray_create(1);
timelines = self->timelines; timelines = self->timelines;
self->timelineIds = spPropertyIdArray_create(16);
for (i = 0, n = timelines->size; i < n; i++) { for (i = 0, n = timelines->size; i < n; i++)
spPropertyIdArray_addAllValues(self->timelineIds, timelines->items[i]->propertyIds, 0, totalCount += timelines->items[i]->propertyIdsCount;
timelines->items[i]->propertyIdsCount); self->timelineIds = spPropertyIdArray_create(totalCount);
}
self->duration = duration; for (i = 0, n = timelines->size; i < n; i++) {
return self; spPropertyIdArray_addAllValues(self->timelineIds, timelines->items[i]->propertyIds, 0,
timelines->items[i]->propertyIdsCount);
}
self->duration = duration;
return self;
} }
void spAnimation_dispose(spAnimation *self) { void spAnimation_dispose(spAnimation *self) {