void flower_destruct(Flower *flower, int64_t recursive) { Flower_GroupIterator *iterator; Sequence *sequence; End *end; Block *block; Group *group; Chain *chain; Flower *nestedFlower; if (recursive) { iterator = flower_getGroupIterator(flower); while ((group = flower_getNextGroup(iterator)) != NULL) { nestedFlower = group_getNestedFlower(group); if (nestedFlower != NULL) { flower_destruct(nestedFlower, recursive); } } flower_destructGroupIterator(iterator); } cactusDisk_removeFlower(flower->cactusDisk, flower); flower_destructFaces(flower); stSortedSet_destruct(flower->faces); assert(flower_getEventTree(flower) != NULL); eventTree_destruct(flower_getEventTree(flower)); while ((sequence = flower_getFirstSequence(flower)) != NULL) { sequence_destruct(sequence); } stSortedSet_destruct(flower->sequences); while ((chain = flower_getFirstChain(flower)) != NULL) { chain_destruct(chain); } stSortedSet_destruct(flower->chains); while ((end = flower_getFirstEnd(flower)) != NULL) { end_destruct(end); } stSortedSet_destruct(flower->caps); stSortedSet_destruct(flower->ends); while ((block = flower_getFirstBlock(flower)) != NULL) { block_destruct(block); } stSortedSet_destruct(flower->segments); stSortedSet_destruct(flower->blocks); while ((group = flower_getFirstGroup(flower)) != NULL) { group_destruct(group); } stSortedSet_destruct(flower->groups); free(flower); }
void flower_reconstructFaces(Flower * flower) { flower_destructFaces(flower); stHash *liftedEdgesTable = buildFaces_computeLiftedEdges(flower); Flower_CapIterator *iter = flower_getCapIterator(flower); stList *liftedEdges; Cap *current; while ((current = flower_getNextCap(iter))) { if ((liftedEdges = stHash_search(liftedEdgesTable, current)) && (stList_length(liftedEdges) >= 1)) { buildFaces_constructFromCap(current, liftedEdgesTable, flower); } } stHash_destruct(liftedEdgesTable); flower_destructCapIterator(iter); }