struct slRef *snpsInTag(struct snp **pChromSnps, int pos, int start) /* Find the SNPs in the next 21 (TAG_SIZE) bases. */ /* chromSnps is sorted so quit search after we go beyond range. */ { struct slRef *snpList = NULL; struct snp *chromSnps, *cur; if (!pChromSnps || !(*pChromSnps)) return NULL; /* Pop off SNPs until we're at the current position. */ cur = *pChromSnps; while (((cur = *pChromSnps) != NULL) && (cur->chromStart < (pos + start))) { cur = slPopHead(pChromSnps); snpFree(&cur); } cur = *pChromSnps; while (cur && (cur->chromStart < (pos + TAG_SIZE + start))) { if ((cur->chromStart >= pos + start) && (cur->chromStart < (pos + TAG_SIZE + start))) { struct slRef *newRef; AllocVar(newRef); newRef->val = cur; slAddHead(&snpList, newRef); } cur = cur->next; } slReverse(&snpList); return snpList; }
void snpFreeList(struct snp **pList) /* Free a list of dynamically allocated snp's */ { struct snp *el, *next; for (el = *pList; el != NULL; el = next) { next = el->next; snpFree(&el); } *pList = NULL; }