/* clone a node */ stTree *stTree_cloneNode(stTree *node) { stTree *node2 = stTree_construct(); stTree_setBranchLength(node2, stTree_getBranchLength(node)); stTree_setClientData(node2, stTree_getClientData(node)); stTree_setLabel(node2, stTree_getLabel(node)); return node2; }
// Set client data to NULL (optionally recursively). static void stTree_clearClientData(stTree *tree, bool recursive) { stTree_setClientData(tree, NULL); if (recursive) { for (int64_t i = 0; i < stTree_getChildNumber(tree); i++) { stTree_clearClientData(stTree_getChild(tree, i), true); } } }
/* destructor */ static void mafTreeNodeCompLink_destruct(struct mafTreeNodeCompLink *ncLink) { if (ncLink->node != NULL) { stTree_setClientData(ncLink->node, NULL); } if (ncLink->comp != NULL) { ncLink->comp->ncLink = NULL; } freeMem(ncLink); }
/* constructor, link with node and comp */ static struct mafTreeNodeCompLink *mafTreeNodeCompLink_construct(int treeOrder, stTree *node, struct malnComp *comp) { struct mafTreeNodeCompLink *ncLink; AllocVar(ncLink); ncLink->treeOrder = treeOrder; if (node != NULL) { ncLink->node = node; stTree_setClientData(node, ncLink); } if (comp != NULL) { ncLink->comp = comp; ncLink->comp->ncLink = ncLink; } return ncLink; }
/* add genome objects as client data */ static void speciesTreeAddLinks(stTree *speciesNode, struct Genomes *genomes) { stTree_setClientData(speciesNode, genomesGetGenome(genomes, stTree_getLabel(speciesNode))); for (int i = 0; i < stTree_getChildNumber(speciesNode); i++) { speciesTreeAddLinks(stTree_getChild(speciesNode, i), genomes); } }