a4c43c4be98b755b068d9bb9353014927014e384 markd Sat Feb 12 13:14:36 2011 -0800 add functions to clone mafAli objects diff --git src/lib/maf.c src/lib/maf.c index 1dc4486..47779c3 100644 --- src/lib/maf.c +++ src/lib/maf.c @@ -834,15 +834,56 @@ struct mafRegDef *mrd = *mrdPtr; if (mrd != NULL) { freeMem(mrd->id); freeMem(mrd); *mrdPtr = NULL; } } boolean isContigOrTandem(char status) /* is status MAF_CONTIG_STATUS or MAF_TANDEM_STATUS */ { return ((status == MAF_CONTIG_STATUS) || (status == MAF_TANDEM_STATUS)); } + +struct mafComp *mafCompClone(struct mafComp *srcComp) +/* clone a mafComp */ +{ +struct mafComp *comp; +AllocVar(comp); +comp->src = cloneString(srcComp->src); +comp->srcSize = srcComp->srcSize; +comp->strand = srcComp->strand; +comp->start = srcComp->start; +comp->size = srcComp->size; +comp->text = cloneString(srcComp->text); +comp->quality = cloneString(srcComp->quality); +comp->leftStatus = srcComp->leftStatus; +comp->leftLen = srcComp->leftLen; +comp->rightStatus = srcComp->rightStatus; +comp->rightLen = srcComp->rightLen; +return comp; +} + +static struct mafRegDef *mafRegDefClone(struct mafRegDef *srcRegDef) +/* clone a srcRegDef */ +{ +return mafRegDefNew(srcRegDef->type, srcRegDef->size, srcRegDef->id); +} + +struct mafAli *mafAliClone(struct mafAli *srcAli) +/* clone a mafAli */ +{ +struct mafAli *ali; +AllocVar(ali); +ali->score = srcAli->score; +struct mafComp *srcComp; +for (srcComp = srcAli->components; srcComp != NULL; srcComp = srcComp->next) + slAddHead(&ali->components, mafCompClone(srcComp)); +slReverse(&ali->components); +ali->textSize = srcAli->textSize; +if (srcAli->regDef != NULL) + ali->regDef = mafRegDefClone(srcAli->regDef); +return ali; +}