18d303bb4f14e1edff401c8a85276ff1344f0f37 angie Tue Apr 3 10:18:14 2012 -0700 Feature #6152 (Variant Annotation Tool): Added annoStreamVcf, whichled to yet more significant changes to annoRow: instead of every row declaring its type and annoRow{Free,Clone} taking a numCols argument that is meaningless for wig, now annoRow{Free,Clone} take the row's source annoStreamer as an argument. The annoStreamer now has public members (rowType and numCols) that provide all information needed about the row. annoStreamer constructors need to set rowType. diff --git src/hg/lib/annoStreamWig.c src/hg/lib/annoStreamWig.c index 0621bb8..f465d4e 100644 --- src/hg/lib/annoStreamWig.c +++ src/hg/lib/annoStreamWig.c @@ -1,23 +1,22 @@ /* annoStreamWig -- subclass of annoStreamer for wiggle database tables */ #include "annoStreamWig.h" #include "annoStreamDb.h" #include "jksql.h" #include "wiggle.h" -//#*** Should this be defined elsewhere? char *annoRowWigAsText = "table annoRowWig\n" "\"autoSql description of a single annoRowWig value, for filtering\"\n" " (\n" " float value; \"data value for this range\"\n" " )\n" ; struct annoStreamWig { struct annoStreamer streamer; // Parent class members & methods / external interface // Private members struct annoStreamer *wigStr; // Internal streamer for .wig as in wiggle db tables FILE *wibF; // wib file handle char *wibFile; // name of wib file on which wibF was opened @@ -108,45 +107,46 @@ return NULL; struct wiggle wiggle; wiggleStaticLoad((char **)wigRow->data, &wiggle); checkWibFile(self, wiggle.file); // translate wigRow + bytes to float vector boolean rightFail = FALSE; int validCount = 0; int bpLen = wiggle.chromEnd - wiggle.chromStart; float vector[bpLen]; getFloatArray(self, &wiggle, &rightFail, &validCount, vector); if (rightFail || validCount > 0) { rowOut = annoRowWigNew(wigRow->chrom, wigRow->start, wigRow->end, rightFail, vector); done = TRUE; } - annoRowFree(&wigRow, WIGGLE_NUM_COLS); + annoRowFree(&wigRow, self->wigStr); } return rowOut; } static void aswClose(struct annoStreamer **pVSelf) /* Free wiggleDataStream and self. */ { if (pVSelf == NULL) return; struct annoStreamWig *self = *(struct annoStreamWig **)pVSelf; carefulClose(&(self->wibF)); freeMem(self->wibFile); annoStreamerFree(pVSelf); } struct annoStreamer *annoStreamWigDbNew(char *db, char *table, int maxOutput) /* Create an annoStreamer (subclass) object from a wiggle database table. */ { struct annoStreamWig *self = NULL; AllocVar(self); struct annoStreamer *streamer = &(self->streamer); annoStreamerInit(streamer, asParseText(annoRowWigAsText)); +streamer->rowType = arWig; streamer->setRegion = aswSetRegion; streamer->setQuery = aswSetQuery; streamer->nextRow = aswNextRow; streamer->close = aswClose; self->wigStr = annoStreamDbNew(db, table, asParseText(wiggleAsText)); return (struct annoStreamer *)self; }