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;
+}