bits32 bbiChromSize(struct bbiFile *bbi, char *chrom) /* Return chromosome size, or 0 if no such chromosome in file. */ { struct bbiChromIdSize idSize; if (!bptFileFind(bbi->chromBpt, chrom, strlen(chrom), &idSize, sizeof(idSize))) return 0; return idSize.chromSize; }
static int bbiChromId(struct bbiFile *bbi, char *chrom) /* Return chromosome size */ { struct bbiChromIdSize idSize; if (!bptFileFind(bbi->chromBpt, chrom, strlen(chrom), &idSize, sizeof(idSize))) return -1; return idSize.chromId; }
void bptLookupStringToBits64(char *indexFile, char *string) /* bptLookupStringToBits64 - Given a string value look up and return associated 64 bit value if * any */ { struct bptFile *bpt = bptFileOpen(indexFile); bits64 val; if (bptFileFind(bpt, string, strlen(string), &val, sizeof(val)) ) printf("%lld\n", val); else errAbort("%s not found", string); }
struct fileOffsetSize *crTreeFindOverlappingBlocks(struct crTreeFile *crt, char *chrom, bits32 start, bits32 end) /* Return list of file blocks that between them contain all items that overlap * start/end on chromIx. Also there will be likely some non-overlapping items * in these blocks too. When done, use slListFree to dispose of the result. */ { /* Find chromosome index. Return NULL if no such chromosome*/ bits32 chromIx; if (!bptFileFind(crt->chromBpt, chrom, strlen(chrom), &chromIx, sizeof(chromIx))) return NULL; return cirTreeFindOverlappingBlocks(crt->cir, chromIx, start, end); }
struct fileOffsetSize *bbiOverlappingBlocks(struct bbiFile *bbi, struct cirTreeFile *ctf, char *chrom, bits32 start, bits32 end, bits32 *retChromId) /* Fetch list of file blocks that contain items overlapping chromosome range. */ { struct bbiChromIdSize idSize; if (!bptFileFind(bbi->chromBpt, chrom, strlen(chrom), &idSize, sizeof(idSize))) return NULL; if (bbi->isSwapped) idSize.chromId = byteSwap32(idSize.chromId); if (retChromId != NULL) *retChromId = idSize.chromId; return cirTreeFindOverlappingBlocks(ctf, idSize.chromId, start, end); }